我在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)
好像是找不到实现类吧。这是为什么呢

解决方案 »

  1.   

    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.provider.url=localhost:1099
    // 端口号加上看看
      

  2.   

    换过没用
    我是把CLIENT里的JAR包放过去了,LIB里的JAR包没加进去
      

  3.   

    请问LZ是怎么解决这个问题的?现在我也遇到这个问题,但是不知道怎么解决?看尚学堂那个视频教程里,开发客户端的时候,只讲Client下面的包给放过去了,并没有将Lib下的包放过去啊
      

  4.   

    这个异常主要是你没有在程序中指定初始化信息而引起的
    初始化引起异常  加上下面的代码 应该就行了:
    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.provider.url=jnp\://localhost\:1099
      

  5.   

    解决办法:
    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了
      

  6.   

    这位朋友,你的方法我试过,可以调通,但是我还是不明白,为什么我用jndi.properties文件配置就不能成功,会出现上述异常呢?我机器上的1099端口被java虚拟机占用了,所以,我将jboss的1099端口,改成了2099,不知是不是这个原因导致我的jndi.properties配置文件不能用?
      

  7.   

    写jndi.properties肯定是好使的,因为JNDI默认会去找
    jndi.properties文件的,不过路径你需要注意一下.自己去google看一下应该放在那.//我记得只要jndi.properties所在的路径在classpath下就ok的,你可以把jndi.properties所在的目录加到classpath下面试一下.
      

  8.   

    没错,jndi.properties得放在src文件夹下面