这几天一直在处理一个问题,就是在eclipse中来访问weblogic中的JNDI,安装了MyEclipse之后,配置MyEclipse的服务器如下:
启动Eclipse,选择“Window -> Preferences”菜单,展开MyEclipse下的Application Servers节点,点击 WebLogic 10.x,选中右边的 Enable 单选按钮,启用 WebLogic 服务器。配置如下:
①BEA home directory:D:\bea(WebLogic 安装在D:\bea目录中)
②WebLogic installation directory:D:\bea\wlserver_10.0
③Admin username:weblogic
④Admin password:weblogic
⑤Execution domain root:D:\bea\user_projects\domains\base_domain
⑥Execution server name:AdminServer
⑦Security policy file:D:\bea\wlserver_10.0\server\lib\weblogic.policy
⑧JAAS login configuration file:这里不用填,空着就可以了.
然后设置JDK,这里JDK并非一定要选用weblogic自带的JDK,因为weblogic自带的JDK的版本相对较早,如weblogic10.0版本的JDK是JDK1.5.6版本的,而现在用的是JDK6.1或JDK6.2.然后设置Classpath,在paths接点
的右面的prepend to classpath 加入weblogic.jar文件,如:D:\bea\wlserver_10.0\server\lib\weblogic.jar这样就
可以了.
这样设置好环境变量之后,我在ECLIPSE中访问weblogic的JNDI时,出现了问题,程序的代码如下
1package javaee.test1;
2
3import javax.naming.*;
4import java.util.Properties;
5
6 public class JNDITest {
7 public static void main(String[] args) {
8 try {
9 Properties p = new Properties();
10 p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
11 p.put(Context.PROVIDER_URL,"t3://localhost:7001");
12 Context ctx = new InitialContext(p);
13 String test = "Hello WebLogic JNDI";
14 ctx.rebind("test",test);
15 String str = (String)ctx.looku("name");
16 System.out.println(str);
17 }
18 catch (NamingException e) {
19 e.printStackTrace();
20 }
21 }
22 }
运行时出现了如下问题:
javax.naming.NoInitialContextException: Cannot instantiate class: weblogic.jndi.WLInitialContextFactory [Root exception is java.lang.ClassNotFoundException: weblogic.jndi.WLInitialContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at javaee.test1.JNDITest.main(JNDITest.java:22)
Caused by: java.lang.ClassNotFoundException: weblogic.jndi.WLInitialContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:42)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
... 4 more
从问题可以看出是找不到weblogic.jndi.WLInitialContextFactory类,开始我认为是classpath环境变量设置错误,但是用winrar打开weblogic.jar发现这个类的确在这个JAR包中,就不知道是什么原因了.到网上找了好久没有找到解决办法.今天起床再来看这个问题的时候,忽然想起老师以前讲过在netbeans中的项目中加入JAR包,于是在eclipse中找了一下,发现可以实现.具体步骤如下:在项目上点鼠标右键,选properties,然后选中左边的Java Build Path,选中右边的Libraries,选择Add External JARs,找到D:\bea\wlserver_10.0\server\lib\weblogic.jar,加入后点OK,就可以了.这时再运行上面的程序,就没有问题了.运行完成后,在weblogic的JNDI Tree里可以看到有一个接点是test,它的内容是"Hello WebLogic JNDI".
在网上找了几天,都没有解决掉这个问题,今天终于解决了,实在是高兴.