我在myeclipse里写EJB3,用的是jboss4.0.5
建了一个服务器端的EJB工程,写了个接口,一个实现类,实现类里写了@Stateless @Remote
又建了个客户端的JAVA工程,把服务器端的接口打了个JAR包,添加到客户端里去了。JBOSS的LIB里的JAR包也全拷进去了。
还写了个jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
启动JBOSS没问题,我也部署了,但是启动时控制台上却没有输出部署文件的信息,只有输出JBOSS启动的一些基本信息,我在JBOSS目录里也看了,是有ebj01.jar这个文件夹的,里面也有接口和实现类的class文件。
现在在客户端调用的时候出现问题
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 com.accp.ejb.FirstEjbClient.main(FirstEjbClient.java:9)
好像是找不到实现类吧。这是为什么呢
建了一个服务器端的EJB工程,写了个接口,一个实现类,实现类里写了@Stateless @Remote
又建了个客户端的JAVA工程,把服务器端的接口打了个JAR包,添加到客户端里去了。JBOSS的LIB里的JAR包也全拷进去了。
还写了个jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
启动JBOSS没问题,我也部署了,但是启动时控制台上却没有输出部署文件的信息,只有输出JBOSS启动的一些基本信息,我在JBOSS目录里也看了,是有ebj01.jar这个文件夹的,里面也有接口和实现类的class文件。
现在在客户端调用的时候出现问题
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 com.accp.ejb.FirstEjbClient.main(FirstEjbClient.java:9)
好像是找不到实现类吧。这是为什么呢
java.naming.provider.url=localhost:1099
// 端口号加上看看
我是把CLIENT里的JAR包放过去了,LIB里的JAR包没加进去
初始化引起异常 加上下面的代码 应该就行了:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp\://localhost\:1099
1:JBOSS客户端用的包应该是$jboss_home/client下的lib
2:jndi.properties的放置路径有讲究的,你可以不用写jndi.properties文件,
只需要在程序里 Properties env = new Properties();
env.setProperty("", "");
env.put("java.naming.provider.url", "localhost:1099");
env.put("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
try {
Context jndiContext = new InitialContext(env);
...另外强调一点:
[把服务器端的接口打了个JAR包]需要copy到$jboss_home\server\default\deploy 这样才能完成ejb的配备.一切都ok了
jndi.properties文件的,不过路径你需要注意一下.自己去google看一下应该放在那.//我记得只要jndi.properties所在的路径在classpath下就ok的,你可以把jndi.properties所在的目录加到classpath下面试一下.