الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في الـJNDI

بدأه NamiRobin في 26 مايو 2011 · 3 رد · 672 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته ,

أنا أحاول أن أكتب Java class

حتى أشبك مع قاعدة بيانات أوراكل , البيئة التي أستعملها هي IBM WebSphere Rational Application Development - RAD

و طريقة الشبك على قاعدة البيانات ليست بالطريقة المعتادة , لكنها باستخدام اللوك آب ...

وهذا هو الكود .. بالله انتبهوا من الميثود getSql_Conn بالذات ..... المشكلة عند تطبيق هذا الميثود يظهر Exception

jndiNamingException

بالله كيف يمكن الحل و شو قصته و كيف يظهر ؟ بديش حل للكود بس بدي أعرف ...... شو قصة هالإكسبشن ....

package com.example.model;

import javax.naming.*;
import java.sql.*;
import javax.naming.Context;
import javax.sql.DataSource;

public class DataBaseConnection {

	private String jndiName;
	private Connection sql_Conn;


	public String getJndiName() {
		return jndiName;
	}
	public void setJndiName(String jndiName) {
		this.jndiName = jndiName;
	}
	public Connection getSql_Conn() {
		Connection result = null;
	    try {
	      Context initialContext = new InitialContext();
	      if ( initialContext == null){
	        System.out.println("JNDI problem. Cannot get InitialContext.");
	      }
	      DataSource datasource = (DataSource)initialContext.lookup("jdbc/HrDr");
	      if (datasource != null) {
	        result = datasource.getConnection();
	      }
	      else {
	        System.out.println("Failed to lookup datasource.");
	      }
	    }
	    catch ( NamingException ex ) {
	      System.out.println("Cannot get connection: " + ex.getMessage());
	    }
	    catch(SQLException ex){
	      System.out.println("Cannot get connection: " + ex.getMessage());
	    }
	    return result;
	}
	public void setSql_Conn(Connection sql_Conn) {
		this.sql_Conn = sql_Conn;
	}

	public static void main(String[] args)
	{
		DataBaseConnection db = new DataBaseConnection();
		Connection conn = db.getSql_Conn();
		db.setSql_Conn(conn);
	}
}

Senior JEE Developer

IBM WebSphere Speccialist

logo_ibm_certified.gif

#2

هل قمتى بإعداد هذا ال Datasource أولا على ال app server ؟؟؟

إستخدمى التوثيق الخاص بال WebSphere (WAS) لمعرفة ذلك ...

#3

أخي قمت بتلك الخطوة ..التي ذكرت ....

عموما أنا قرأت في عدة مواضيع و عدة منتديات حتى Documentation's الخاصة في IBM التي تتحدث عن المشكلة و حتى الvendors الأخرى عل و عسى و هناك حل لكن تلك المنتديات أجمعت تقريبا على واحد من هذه المشاكل :

1 - أولا " نفس الطرح الذي طرحته حضرتك " الdatasource غير معرفة على الapplication server فال jndiNamingException تظهر في حالة أني أشبك مع Datasource غير موجود ممكن تكون المشكلة في Provider's أو في السيرفر يعاد ضبطه في بعض المسائل ممكن البورت مثلا ممكن في اليو أر أل .. إلخ و قمت بالتأكد ما في عندي مشاكل.

2 - ثانيا : من الممكن أن يظهر هذا الException ... في عالم IBM تضارب في الJVM's أنا لم أفهمها للأمانة - تضارب في بين JvM الخاصة في Sun و IBM وحتي تحل هذه المشكلة يجب أن نقوم بنسخ ملفين من نوع JAR في classpath

المضحك في الموضوع ....

أن الكلاس التي كتبتها في المشاركة أعلاه لم يصلح لها أي نوع من أنواع الحلول ...

عندما أقوم بعمل الrun من خلال main ميثود في كلاس عادية .. يظهر هذا الException

لكن عندما أقوم بعمل أوبجكت من هذا الclass و الشبك مع قاعدة البيانات من خلال ...servlet او Portlet

الكلاس تعمل و بدون أي مشاكل ........ :)

Senior JEE Developer

IBM WebSphere Speccialist

logo_ibm_certified.gif

#4
اقتباس
المضحك في الموضوع ....

أن الكلاس التي كتبتها في المشاركة أعلاه لم يصلح لها أي نوع من أنواع الحلول ...

عندما أقوم بعمل الrun من خلال main ميثود في كلاس عادية .. يظهر هذا الException

لكن عندما أقوم بعمل أوبجكت من هذا الclass و الشبك مع قاعدة البيانات من خلال ...servlet او Portlet

هل تعرفين لم؟

لانكى في الحالة الأولى تستخدمين JDK المعرفه داخل ال IDE (أو إن كنتى تستخدمين ال CLI ... الموجوده داخل ال PATH) (والتى غالبا ما تكون SUN JDK )

أما في الحالة الثانيه .. فإنكى تستخدمى ال JDK الموجوده داخل ال App Server ...

و هنا تكمن المشكلله ..

بالمناسبة .. حصلت معى مشكله مشابهه ...

فنحن نستخدم Oracle App Server .. و الذي يستخدم ال JDK الخاصه ب Oracle و التى تسمى JRocket ..

و كنت أستخدم SUN JDK في التطوير ... فعندما قمت برفع التطبيق على ال App Server .. أشياء كانت من المفترض تعمل .. لم تعمل معى ....

لذا من المهم جدا أن نقوم بإستخدام نفس ال JDK التي يستخدمه ال App Server و جعلها هي ال Default JDK في النظام ..

مواضيع مشابهة