الأربعاء، 25 أكتوبر 2017

Connection Psotgresql Database in Jdeveloper IDE


السلام عليكم ورحمة الله وبركاته
موضوع اليوم هو كيفية عمل Connection  لقاعدة البيانات Psotgresql داخل  بيئة العمل  Jdeveloper
بداية للتعامل مع أي قاعدة البيانات أول ما يتطلبه العمل هو تحميل الـ Driver  الخاص بقاعدة البيانات التي سيتم التعامل معها ، 
هنا التعامل سيكون مع (Psotgresql) لذلك سيتطلب إضافة الـ Driver وإضافة إسم Class خاصة له ، لأنه غير موجود ضمن إختيارات قاعدة البيانات التي توفها بيئة الـ Jdeveloper ، سأوضح هذا في الشرح أدناه

إذن نقوم بتحميل JDBC Driver PostgreSQL من الموقع التالي :

مع الإنتباه إلى إنه يكون الإصدار متوافق مع JDK المتوافق لديك على الجهاز وحسب ما مبينة هذه الملاحظة على الموقع في الرابط أعلاه
الآن نعمل على الدخول بيئة الـ Jdeveloper لإضافة الـ JDBC Driver PostgreSQ الذي تم تحميله للتو 
ولنتابع الطريقة بالصور 
من المسار التالي : Application >>> Default Project Properties كما في الصورة  المبينه في أدناه


بعدها ندخل على Libraries and ClassPath كما في الصورة المبينه أدناه في خانة Library Name ضع إسم مناسب دال على إسم الـ Driver إختر User بــ  Location



بعدها قم بالضغط على Add Entry لتظهر النافذة التالية قم بإختيار الـ Driver  الذي قمنا يتحميله من الموقع


ستتم الإضافة كما في الصورة أدناه

قم بالضغط Ok لنرى كيف تمت الإضافة لهذه المكتبة 

أنظر كيف تمت الإضافة للمكتبة


الآن نعمل connection جديد ولنرى كيف يتم الإتصال وماهي المشاكل التي نتعرض لها 
بداية نرى أنه لا يوجد Type  Connection لقاعدة PostgreSQL كما في الصورة المبينة في أدناه


ولهذا سنختار Generic JDBC كما في الصورة المبينة أدناه: 
لكن نجد عدم توفر إسم الـ Driver Class التابع لها على الرغم من أنه تمت الإضافة للمكتبة لكن لم يتم إضافة الـ Driver Class التابع لها لذلك لايظهر ضمن القائمة حتى يتم إختياره، لذلك يتوجب إضافة Driver Class أيضاً


الآن نقوم بإضافة الـ Driver Class كي يتم التعرف عليه ويظهر ضمن القائمة مع بقية الـ Drivers Class،  
لنتبع التالي
من Reference <<< Tools ، من النافذة التي تظهر نختار  JDBC Driver Options <<< Database ,  ونتبع تسلسل الخطوات بإختيار الرمز + ونحتاج إلى إسم الـ Driver Class  ألا وهو org.postgresql.Driver  كما في الصورة المبينة في أدناه


وبعد الضغط على زر Browse  لتظهر النافذة التالية قم بإختيار كما مبين (نجد المكتبة هنا لأنه تم إضافتها بالخطوات السابقة أعلاه)


وبعدها Ok لنرى كيف تمت الإضافة للـ Driver Class


الآن نعود إلى نافذة Connection ونعمل Connection ونرى أنه كيف تم إضافة Driver Class  وبمجرد إختياره تظهر المكتبة التابعة له ضمن خانة Library


بعد إعطاء username و password  كما متواجد لديك وننتبه إلى JDBC URL يكون بهذه الصيغة 
jdbc:postgresql://host/databasename أي تكون jdbc:postgresql://localhost/postgres
كما في الصورة المبينة في أدناه

إن شاء الله تكون الخطوات واضحة ..بالتوفيق إن شاء الله



الثلاثاء، 3 أكتوبر 2017

Upload and Download File on - from Server Path in ADF Application


السلام عليكم 
 إن شاء أوضح خطوات رفع وتحميل ملف من وإلى (server_ path)  بتطبيق ADF
  تم عمل التطبيق على إصدار JDeveloper 12.1.3.0.0 وإصدار JDeveloper 11.1.2.2.0 

  *** لتحميل المثالين نهاية المشاركة    

       1-  إنشاء جدول يتضمن أهم معلومات عن الملف (إسم الملف، مساره، إمتداده) ، حسب صيغة الأمر التالية 
            (create sql statement) :

CREATE TABLE UPLOAD_DOWNLOAD_FILE
 ( 
FILE_NAME VARCHAR2(500), 
PATH VARCHAR2(500),
CONTENT_TYPE VARCHAR2(500), 
CONSTRAINT UPLOAD_DOWNLOAD_FILE_PK  PRIMARY KEY (FILE_NAME)
 );

       1-  ننشأ تطبيق Fusion Web Application ADF   بالطريقة المتعارف عليها
       2-  ننشأ ADF Business Components From Table  للجدول الذي تم إنشاؤه الآن الأ وهوTABLE UPLOAD_DOWNLOAD_File 
         (أي إنشاء   Entity Object, View Object, AppModule)

      3-    إنشاء صفحة ذات إمتداد .jspx بأي إسم ترغب به كما في الصورة المبينة أدناه



        5-      بالسحب والإفلات يتم إضافة Component af:inputFile على الصفحة
        6- من Data Controls وبالسحب والإفلات يتم إضافة UploadDownloadFileView1  كـ ADF Table Read Only  كما في الصورة أدناه:



        7-  تصميم الصفحة وهيكلة التطبيق سيكون بالشكل التالي: 



          8- الأن ننشأ الـimpl class  كما في الصورة المبينة أدناه



نضغط Ok و بعدها


         9-  في ApplModuleImpl يتم كتابة method  setFileData وظيفتها تعمل على إضافة صف (insert row
             بالكود التالي:


    public void setFileData(String name, String path,String contTyp)
            {
            ViewObject fileVo = this.getUploadDownloadFileView1();
            Row newRow = fileVo.createRow();
            newRow.setAttribute("FileName", name);
            newRow.setAttribute("Path", path);
            newRow.setAttribute("ContentType", contTyp);
            fileVo.insertRow(newRow);
            this.getDBTransaction().commit();
            fileVo.executeQuery();
            }
            

         10- الآن نعمل save  لكل التطبيق
        11-  مازلنا بالـ AppModule  ومن Client interface نعمل لإختيار الـ method setFileData التي تم كتابتها في أعلاه  كما في تسلسل الصور المبينة أدناه:



يتم إضافتها إلى جهة اليمين كما في الصورة المبينة أدناه ثم نضغط ok  ويتم عمل save للتطبيق  



         12- الآن نذهب إلى Page Definition  لإضافة الـ Binding   للـ method setFileData كما في الصور المبينة أدناه:


بعدها تظهر النافذة التالية 

 بعدها ok  وعمل save للتطبيق


       13- الآن كصفحة وكـ  AppModule  تم الإنتهاء من العمل معهما نأتي الآن لكتابة الكود للرفع upload والتحميل Download
      14- نبدأ بكود الرفع Upload  بالذهاب إلى زر Browser ومن الخصائص التابعة له نقوم بإضافة الـ ValueChangeListener  كما في الصورة المبينة أدناه

بعدها New ونعطي المسميات لكل من bean والـ Class ثم Ok

وبعدها New لإنشاء وتسمية الـ method التي ستضم كود الرفع upload



       15- في ValueChangeListener نكتب الكود التالي:

6       
        public void uploadImg(ValueChangeEvent valueChangeEvent)
   
    {
        if (valueChangeEvent.getNewValue() != null)
                      {
        UploadedFile fileVal = (UploadedFile) valueChangeEvent.getNewValue();
                      String path = uploadFile(fileVal);
                      System.out.println(fileVal.getContentType());
                      OperationBinding ob = executeOperation("setFileData");
                      ob.getParamsMap().put("name", fileVal.getFilename());
                      ob.getParamsMap().put("path", path);
                      ob.getParamsMap().put("contTyp", fileVal.getContentType());
                      ob.execute();
                      ResetUtils.reset(valueChangeEvent.getComponent());
                      }
        // Add event code here...
    }
   
    public BindingContainer getBindingsCont() {
              return BindingContext.getCurrent().getCurrentBindingsEntry();
          }

          public OperationBinding executeOperation(String operation) {
      OperationBinding createParam = getBindingsCont().getOperationBinding(operation);
              return createParam;
         }
         
    private String uploadFile(UploadedFile file)
               {
               UploadedFile myfile = file;
               String path = null;
               if (myfile == null) {
                  }
         else
        {
                path = "D://MyFilesSave//" + myfile.getFilename();
                InputStream inputStream = null;
                try {
                FileOutputStream out = new FileOutputStream(path);
                inputStream = myfile.getInputStream();
                byte[] buffer = new byte[8192];
                int bytesRead = 0;
                while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
                out.write(buffer, 0, bytesRead);
               }
                out.flush();
                out.close();
                 } catch (Exception ex) {
                     // handle exception
               ex.printStackTrace();
                } finally {
                try {
                inputStream.close();
                 } catch (Exception e) {}
                   }
                   }
                     //Returns the path where file is stored
                  return path;
               }



    مع الإنتباه أن نضع الخاصية AutoSumit لهذا الزر بـ True ونشير إلى خاصية الـ PPR  للجدول (af:Table) بـ af:inputFile   
ملاحظة: علينا الإنتباه انه لدينا مجلد يحمل نفس الإسم المكتوب بالكود لحفظ الصور التي تم رفعها وعلى نفس المسار 

      15 - إلى هنا تم الإنتهاء من عملية الرفع نأتي الآن لعملية التحميل Download ، نقوم بإضافة عمود للجدول يمثل link  ومن الـ Components يتم إضافة af:fileDownloadActionListener  بداخل هذا الـ link 
      ويتم ضبط خصائص الـ af:fileDownloadActionListener بخانة الـ method  بإسم الـ method المعدة لعمل Download  وهي   downloadAction وتضم الكود التالي :

public void downloadAction(FacesContext fc, OutputStream os)throws                  Exception {
               File filed = new File(pathBind.getValue().toString());
               FileInputStream fis;
               byte[] b;
               try {
               fis = new FileInputStream(filed);
               int n;
               while ((n = fis.available()) > 0) {
               b = new byte[n];
               int result = fis.read(b);
               os.write(b, 0, b.length);
               if (result == -1)
               break;
                }
                } catch (Exception e) {
               e.printStackTrace();
                 }
               os.flush();
                 }        

ا1-        الآن سيظهر إعتراض عند كلمة pathBind  حسنا نذهب إلى الجدول وعلى العمود path  من خصائصة ننشأ bind  بإسم pathBind  كما في الصورة المبينة أدناه : 

بعدها مباشرة سيضاف هذا الـ Binding  ومعه إضافته الـ setter , getter ويختفي الإعتراض على المسمى pathBind

الآن نعمل save  للتطبيق وبسم الله نعمل run للصفحة كما في الصورة المبينة أدناه :


بعد الضغط على زر إختيار ملف يفتح لدينا نافذة open لنختار ملف للرفع 


والنتيجة كالآتي يتم الحفظ بالجدول كمعلومات عن الملف الذي تم رفعه والملف تم حفظه على الجهاز حسب إسم المجلد والمسار المعطى له 

وعند التحميل يتم بالضغط على Download لنرى أن تفتح نافذة save  ويتم الحفظ 



تم بحمد لله 
لتحميل المثال بإصدار JDeveloper 11.1.2.2.0  إضغط هنا 

لتحميل المثال بإصدار  JDeveloper 12.1.3.0.0 إضغط هنا

بالتوفيق إن شاء الله

Connection Psotgresql Database in Jdeveloper IDE

السلام عليكم ورحمة الله وبركاته موضوع اليوم هو كيفية عمل Connection  لقاعدة البيانات  Psotgresql داخل  بيئة العمل  Jdeveloper بداي...