الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

أردت أن أستدعي دالة معرفة في Appmodule من Bean

Featured Replies

بتاريخ:

سلام عليكم

 

مبارك عليكم جميعا شهر رمضان

 

بالأمس القريب أردت أن أستدعي دالة معرفة في appModule من Bean فبحثت عن الحل فوجدت نفسي في دوامة من الاستدعاءات  لكي أصل إلى الدالة الهدف

 

وإليكم التوضيح ولعله يفيد كثيرين

 

أردت أن أستخدم datasource الموجود في appmodule لكي أتفادى استحداث اتصال مستقل في bean ، فهذه الطريقة معيبة وأكبر عيوبها أنها في حال زحمة على الموقع سيكون استحداث الكثير الكثير من الاتصالات وذلك بالتأكيد سيؤدي إلى استهلاك موارك السيرفر وربما إلى ايقافه

 

المهم كتبت دالة في AppModule

    public ResultSet getResultSet() {
        ResultSet rs = null;
        String stmt = "select user_name ,password from user";
        PreparedStatement pr = getDBTransaction().createPreparedStatement(stmt, 0);
        try {
            rs = pr.executeQuery();
        } catch (SQLException e) {
        }
        return rs;
    }

ثم أعلنت عنها في Client interface

 

ثم من الصفحة jsf قمت بالربط عن طريق binding

 

ثم من ال bean كتبت هذه الكارثة



        FacesContext facesContext = FacesContext.getCurrentInstance();
        Application app = facesContext.getApplication();
        ExpressionFactory elFactory = app.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        ValueExpression valueExp = elFactory.createValueExpression(elContext, "#{bindings}", Object.class);
        BindingContainer binding = (BindingContainer) valueExp.getValue(elContext);
        OperationBinding operationBinding = binding.getOperationBinding("getResultSet");
     
        // Set the Input parameters to the operation bindings as below
        //operationBinding.getParamsMap().put("username", username);
        // Invoke the Application module method
        
        
        operationBinding.execute();
        ResultSet rs = (ResultSet) operationBinding.getResult();
      

        .............

عملت من قبل على framework مثل EJB و Spring ولم أجد مشكلا في استدعاء دالة من اي موقع من المشروع

تم تعديل بواسطة ahmed_ah_sh

بتاريخ:

فيه كلاسين في ال ADF فيهم methods مساعدة في عملية البرمجة: 

1- ADFUtils

2- JSFUtils

وبتقدر تنفذ ال method في سطر واحد بالشكل التالي:

ADFUtils.findOperation("YourMethodName").execute();

بتاريخ:

الاخ احمد
ما المشكلة التي تقابلها بالضبط عند تشغيل الكود

بتاريخ:
  • كاتب الموضوع

ما مشكلة اخي مصطفى غير اني تعجبت من كثرة الاستدعاءات للوصول إلى دالة في appModule مع أنه كان يجوز أن أستدعيها مباشرة كما أفعل في أطر العمل الأخرى

 

 فلماذا هذا التعقيد ؟ 

 

طبعا أنت لم تفهم المقصد لأن المشرف غير العنوان 

تم تعديل بواسطة ahmed_ah_sh

بتاريخ:

ﻻ يوجد تعقيد. ان عرف السبب بطل العجب
ﻻ يمكن استدعاء دالة مباشرة من AppModule لان هذا الملف يقوم بقراءة ملفات business components ويقوم بانشاء اتصال مع قاعدة البيانات وبالتالي له طريقة خاصة في الاستدعاء

بتاريخ:

السلام عليكم

من خلال فهمي للمطلوب اعتقد انه يمكن وضع الكود التالي داخل زر داخل الbean 

 حيث ال "model.AppModule" هي اسم الAM وال AppModuleLocal هي اسم ال configuration ويمكن الحصول عليهم من خصائص ال AM 

الكود التالي يستدعي دالة getCountname  والتي تستقبل باراميتر ويستقبل الناتج ثم يضعه في input text 

String amDef = "model.AppModule";
        String conf="AppModuleLocal";
        ApplicationModule am =Configuration.createRootApplicationModule(amDef,conf);
        AppModuleImpl ser=(AppModuleImpl) am;
       
        String ret=ser.getCountname(it1.getValue().toString());
       
   
        it2.setValue(ret);

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.