Jboss+Myeclipse初学者常见问题

本文详细介绍了在Eclipse中配置JNDI及使用JBOSS进行EJB客户端开发的过程。主要内容包括解决常见异常的方法,如NoInitialContextException,以及如何正确配置jndi.properties文件和设置JNDI命名规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.要在Eclipse中JRE类库中加入%JBOSS_HOME%/client/jbossall-client.jar 否则会抛出异常:

Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:175)
at org.wind.unit.TestCalculator.main(TestCalculator.java:18)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
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:276)
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:247)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
... 4 more

2.在MyEclipse创建EJB客户端项目时,需要手动创建jndi.properties也可以在将%JBOSS_HOME%\server\all\conf\jndi.properties复制到项目中,也可以在CODE中使用Properties类或者Hashtable类创建一个jndi,否则找不到JNDI而抛出异常:

Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.wind.unit.TestCalculator.main(TestCalculator.java:30)

3.将jndi.properties复制到项目中之后,要在jndi.properties中加入java.naming.provider.url=localhost:1099 (不一定是localhost:1099根据开发需要可能会更改)否则会抛出异常:

Exception in thread "main" javax.naming.CommunicationException: Receive timed out
at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1465)
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1594)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.wind.unit.TestCalculator.main(TestCalculator.java:30)
Caused by: java.net.SocketTimeoutException: Receive timed out
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
at java.net.DatagramSocket.receive(DatagramSocket.java:712)
at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1435)
... 5 more


使用Propertie类:

Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
InitialContext ict=new InitialContext(props);

使用Hashtable:

Hashtable<String, String> prop=new Hashtable<String, String>();
prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
prop.put(Context.PROVIDER_URL, "localhost:1099");
InitialContext ict=new InitialContext(prop);

4.JNDI命名规则是 EAR包名/Bean名称/remote(local) 若没有EAR包则直接是Bean名称/remote(local)。


5.当使用local时 要注意测试的时候一定要保证都在一个JVM中。


6.创建Session Bean时要注意自己使用的是有状态(@Stateful)还是无状态(@Stateless)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值