高手帮忙啊,再一次问困扰我很多天的EJB问题

bartfj 2006-02-26 02:37:56
我用myeclipse+jboss写了一个简单的Helloworld的EJB

然后写一个测试程序,如下

public class HelloClient {
public static void main(String[] args) throws Exception {

Properties props = new Properties();


props.put(Context.PROVIDER_URL,"localhost:1099");

Context ctx=new InitialContext(props);

Object obj=ctx.lookup("HelloHome");

HelloHome home=(HelloHome)javax.rmi.PortableRemoteObject.narrow(obj,HelloHome.class);

Hello hello=home.create();

System.out.println(hello.Hello());

hello.remove();
}
}

同时也将来jboss目录下client中的jboss-client.jar添加到了classpath中了

但运行时仍然出现如下错误:

Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
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 com.my.client.HelloClient.main(HelloClient.java:17)
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: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



在网上找了好久,也没有找到解决方法

哪位高手帮帮我啊,郁闷太久了
...全文
221 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
rgwfeng2 2006-04-15
  • 打赏
  • 举报
回复
mark
天外流星 2006-02-28
  • 打赏
  • 举报
回复
你的部署没有成功
infowain 2006-02-28
  • 打赏
  • 举报
回复
192.168.0.1是我机器的IP,你用127.0.0.1也可以啊。

要不要加这些参数的区别在于
如果你的客户端也在jboss里面执行,例如是一个jsp或者servlet,那么就不用加这些参数,因为你的jboss就有这个context环境。
而如果你的客户端是一个独立的java程序,那么就需要加这些参数了,因为这个时候没有context环境了。

还有你的错误是ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
说明你还没有把jboss的client包加入到你的classpath里面。
把jboss/client/下的jar包都导到classpath下应该可以了。
sonyejin 2006-02-27
  • 打赏
  • 举报
回复
把上面两句都注释掉看看
bartfj 2006-02-27
  • 打赏
  • 举报
回复
我把它改成


props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://192.168.0.1:1099");

也是一样的错误啊
sonyejin 2006-02-27
  • 打赏
  • 举报
回复
InitialContext指定的参数不全,应该是

props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://192.168.0.1:1099");

我也觉得是参数有问题,我连过JBoss,参数好像用的是空
bartfj 2006-02-27
  • 打赏
  • 举报
回复
为什么是192.168.0.1?
不应该是本地主机吗
infowain 2006-02-27
  • 打赏
  • 举报
回复
InitialContext指定的参数不全,应该是

props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://192.168.0.1:1099");
bartfj 2006-02-27
  • 打赏
  • 举报
回复
还有,
jboss目录下client文件夹中的哪些文件要添加?又是往哪里添加?是classpath里还是在myeclipse里
bartfj 2006-02-27
  • 打赏
  • 举报
回复
请问这个测试文件应该放在哪个目录啊,
是不是放的位置不对
sonyejin 2006-02-26
  • 打赏
  • 举报
回复
好像是获取JNDI上下文时出错,Jboss默认的端口号是8080吧,
你把props.put(Context.PROVIDER_URL,"localhost:1099");这句注释掉看看呢
bartfj 2006-02-26
  • 打赏
  • 举报
回复
运行netstat -a
出现有:

TCP abc:1099 abc:0 LISTENING,abc是我的计算机名

这样是有没问题?
doway 2006-02-26
  • 打赏
  • 举报
回复
netstat -a -n

检查一下 1099 端口。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧