这两天在学习ejb,且不说ejb如何编写,刚开始就被jndi给难住了。记得以前在Jbuilder中照着别人的方法试过,已经成功了,没有深研。想不到现在来做,又给难住了,搞了两天终于有了结果。
首先说一说客户端通过jndi连接weblogic,不需要把客户端程序放到(或是布署到)weblogic中运行,客户端用一个简单的class文件既可,代码下如。
Java代码
- /*JNDIClientTest.java*/
- import java.util.Properties;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- publicclass JDNIClientTest {
- publicstaticvoid main(String[] args) {
- String url = "t3://localhost:7001";
- Properties prop = null;
- try {
- prop = new Properties();
- prop.put(Context.INITIAL_CONTEXT_FACTORY,
- "weblogic.jndi.WLInitialContextFactory");
- prop.put(Context.PROVIDER_URL, url);
- Context context = new InitialContext(prop);
- System.out.println("OK!");
- } catch (Exception e) {
- System.out.println(e.toString());
- }
- }
- }
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
public class JDNIClientTest {
public static void main(String[] args) {
String url = "t3://localhost:7001";
Properties prop = null;
try {
prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
prop.put(Context.PROVIDER_URL, url);
Context context = new InitialContext(prop);
System.out.println("OK!");
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
上面包括的包都是jre里的标准包。启动weblogic后,运行该程序。
当然会有问题,显示“javax.naming.NoInitialContextException: Cannot instantiate class: weblogic.jndi.WLInitialContextFactory [Root exception is java.lang.ClassNotFoundException: weblogic.jndi.WLInitialContextFactory]” 为什么编译没问题了,却还是出错呢,这是网络上问得最多的问题。这是缺少"\bea\weblogic81\server\lib\ wlclient.jar"文件所致。 在buildpath里加入这个包后再运行。
如果还是出错,显示“Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/corba/se/connection/ORBSocketFactory” 还是缺少包,这时如果你只安装有jre1.5.*,那是没有ORBSocketFactory这个类文件的。还是找个jre1.4.*吧,这个类在 “jre/lib/rt.jar”包中。据说这个问题在weblogic9中已解决。
这时应该没什么问题了,你可以进一步学习ejb或其它内容了。
上面的t3:是weblogic中jndi用的协议,就和http一样,其它服务器如jboss用iiop之类进行连接,不同的服务器连接的方式不一样,具体要再查资料。