ejb 的小问题 请大家帮帮忙

时间:2022-09-06 17:35:41
jboss 部署成功了 但客户端调用出现问题
报错:
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interf
aces.Naming ContextFactory [Root exception is java.lang.ClassNotFoundException:
org/jnp/interfaces/Naming ContextFactory]

客户端:
package greet;
import javax.naming.*;
import java.util.Hashtable;
import javax.rmi.PortableRemoteObject; 
import greet.*;
class GreetClient
{
 public static void main(String[] args) {
  System.setProperty("java.naming.factory.initial", 
"org.jnp.interfaces.Naming ContextFactory");
  System.setProperty("java.naming.provider.url", 
"localhost:1099");
try {
   // Get a naming context
   InitialContext jndiContext = new InitialContext();
  System.out.println("Got context");
 Object ref  = jndiContext.lookup("GreetingEJB");
  System.out.println("Got reference");
 GreetHome home = (GreetHome) 
   PortableRemoteObject.narrow (ref, GreetHome.class);
   Greet greet = home.create();
   System.out.print("The magic number from server is ");
System.out.println(greet.calculateMagic(123.456));
  } catch(Exception e) {
   System.out.println(e.toString());
  }
 }
}
ejb-jar.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<description>jBoss test application </description>
<display-name>Test</display-name>
<enterprise-beans>
<session>
<ejb-name>GreetEJB</ejb-name>
<home>greet.GreetHome</home>
<remote>greet.Greet</remote>
<ejb-class>greet.GreetBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>

jboss.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>GreetEJB</ejb-name>
<jndi-name>GreetingEJB</jndi-name>
</session>
<secure>false</secure>
</enterprise-beans>
<resource-managers/>
</jboss>

8 个解决方案

#1


org/jnp/interfaces 包没有找到,在lib目录下有该包,你可以解压到你得目录或者在classpath里面设置该路径就可以了

#2


好象没有这个包呀? 在什么目录下找呀?
详细一点吧!
谢谢!

#3


一般是在容器的deploy/lib目录下,我不知道你用的是什么容器运行,我用的是jboss3.2.3,那么我就在e:/jboss3.2.3/server/deploy/lib/下面找到jnpserver.jar这个包,你可以把这个包的路径加到classpath中,也可以把这个包解压到与你的程序在同一个目录下就可以了.象这种找不到class错误大多都是因为他找不到包,你可以手工挨个打开jar包看看里面有没有你想要的类,找到这些包,然后把路径告诉编译器就可以了,说的这么详细是不是该揭贴了啊?有问题在问.

#4


老大
我的是jboss-3.2.4 按你的做了 没用呀
可恶的jndi

能发个完整的例子吗?
code@cnkj.cn
谢谢!
先加分给你罗!!

#5


不会啊,我前面也遇到你得这个问题,然后我就把jnpserver.jar这个包解开,取里面得org文件夹放到你得测试程序同一目录下就可以了啊,你照我得做肯定是没错得。你得问题是包没有找到,那么你把包路径找到了就肯定行得。如有问题,可以看我得那篇讲调试ejb得帖子.如果还报错,你要看清楚是不是还是原来得错啊。照我得经验,你后面还会有很多包找不到,需要你自己手工找到告诉编译器得。

#6


现在是:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/logging/Log
ger
        at org.jnp.interfaces.NamingContext.<clinit>(NamingContext.java:102)
        at org.jnp.interfaces.NamingContextFactory.getInitialContext(NamingConte
xtFactory.java:41)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
62)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243
)
        at javax.naming.InitialContext.init(InitialContext.java:219)
        at javax.naming.InitialContext.<init>(InitialContext.java:195)
        at greet.GreetClient.main(GreetClient.java:18)


不会真的一个一个找把?有别的方法吗?
另外能在jboss 中部署jsp+bean+servlet的程序吗?
如能怎么做请指点!
谢谢!
解决后加高分!

#7


.;D:\j2sdk1.4.2\lib;D:\j2sdk1.4.2\lib\tools.jar;E:\jboss-3.2.3\server\default\lib\jboss-j2ee.jar;E:\jboss-3.2.3\server\default\lib\jnpserver.jar;E:\jboss-3.2.3\server\default\lib\javax.servlet.jar;E:\jboss-3.2.3\client\jbossall-client.jar;E:\jboss-3.2.3\client\jnet.jar;E:\jboss-3.2.3\client\log4j.jar;E:\jboss-3.2.3\server\default\lib\jboss.jar;E:\jboss-3.2.3\server\default\lib\jboss-transaction.jar

我以前是一个一个找得,classpath 这样配置成这样就可以了。
部署jsp+bean+servlet 我没有配过。

#8


应该是这
  System.setProperty("java.naming.factory.initial", 
"org.jnp.interfaces.Naming ContextFactory");
  System.setProperty("java.naming.provider.url", 
"localhost:1099");设置错误吧。
你把它换成:
    Properties p = new Properties();

    p.setProperty(javax.naming.Context.PROVIDER_URL,
                           PROVIDER_URL);//PROVIDER_URL与服务器类型有关。

    p.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
                        INITIAL_CONTEXT_FACTORY);

    InitialContext jndiContext = new InitialContext(p);

#1


org/jnp/interfaces 包没有找到,在lib目录下有该包,你可以解压到你得目录或者在classpath里面设置该路径就可以了

#2


好象没有这个包呀? 在什么目录下找呀?
详细一点吧!
谢谢!

#3


一般是在容器的deploy/lib目录下,我不知道你用的是什么容器运行,我用的是jboss3.2.3,那么我就在e:/jboss3.2.3/server/deploy/lib/下面找到jnpserver.jar这个包,你可以把这个包的路径加到classpath中,也可以把这个包解压到与你的程序在同一个目录下就可以了.象这种找不到class错误大多都是因为他找不到包,你可以手工挨个打开jar包看看里面有没有你想要的类,找到这些包,然后把路径告诉编译器就可以了,说的这么详细是不是该揭贴了啊?有问题在问.

#4


老大
我的是jboss-3.2.4 按你的做了 没用呀
可恶的jndi

能发个完整的例子吗?
code@cnkj.cn
谢谢!
先加分给你罗!!

#5


不会啊,我前面也遇到你得这个问题,然后我就把jnpserver.jar这个包解开,取里面得org文件夹放到你得测试程序同一目录下就可以了啊,你照我得做肯定是没错得。你得问题是包没有找到,那么你把包路径找到了就肯定行得。如有问题,可以看我得那篇讲调试ejb得帖子.如果还报错,你要看清楚是不是还是原来得错啊。照我得经验,你后面还会有很多包找不到,需要你自己手工找到告诉编译器得。

#6


现在是:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/logging/Log
ger
        at org.jnp.interfaces.NamingContext.<clinit>(NamingContext.java:102)
        at org.jnp.interfaces.NamingContextFactory.getInitialContext(NamingConte
xtFactory.java:41)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
62)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243
)
        at javax.naming.InitialContext.init(InitialContext.java:219)
        at javax.naming.InitialContext.<init>(InitialContext.java:195)
        at greet.GreetClient.main(GreetClient.java:18)


不会真的一个一个找把?有别的方法吗?
另外能在jboss 中部署jsp+bean+servlet的程序吗?
如能怎么做请指点!
谢谢!
解决后加高分!

#7


.;D:\j2sdk1.4.2\lib;D:\j2sdk1.4.2\lib\tools.jar;E:\jboss-3.2.3\server\default\lib\jboss-j2ee.jar;E:\jboss-3.2.3\server\default\lib\jnpserver.jar;E:\jboss-3.2.3\server\default\lib\javax.servlet.jar;E:\jboss-3.2.3\client\jbossall-client.jar;E:\jboss-3.2.3\client\jnet.jar;E:\jboss-3.2.3\client\log4j.jar;E:\jboss-3.2.3\server\default\lib\jboss.jar;E:\jboss-3.2.3\server\default\lib\jboss-transaction.jar

我以前是一个一个找得,classpath 这样配置成这样就可以了。
部署jsp+bean+servlet 我没有配过。

#8


应该是这
  System.setProperty("java.naming.factory.initial", 
"org.jnp.interfaces.Naming ContextFactory");
  System.setProperty("java.naming.provider.url", 
"localhost:1099");设置错误吧。
你把它换成:
    Properties p = new Properties();

    p.setProperty(javax.naming.Context.PROVIDER_URL,
                           PROVIDER_URL);//PROVIDER_URL与服务器类型有关。

    p.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
                        INITIAL_CONTEXT_FACTORY);

    InitialContext jndiContext = new InitialContext(p);