当前位置: 代码迷 >> J2EE >> in thread "main" javax.naming.NoInitialContextException:
  详细解决方案

in thread "main" javax.naming.NoInitialContextException:

热度:236   发布时间:2016-04-22 03:16:14.0
EJB问题!!!是高手就来!!!
今天刚接触EJB,编写了一个客户端如下(在EJB_01_Client项目里):
1、public class FirstEjbClient {
public static void main(String[] args) throws Exception{
InitialContext context = new InitialContext();
FirstEjb fe = (FirstEjb)context.lookup("FirstEjbBean/remote");
String s = fe.saySomething("moon");
System.out.println(s);
}
}
运行时报错:
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(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.moon.ejb.FirstEjbClient.main(FirstEjbClient.java:9)
2、说明:
已经将项目部署到了JBOSS服务器上,版本是4.2.2.GA,部署没有问题,我已经引进了jboss-4.2.2.GA\client下所有的jar包,而且引进了EJB项目(ejb_01)下EJB接口(FirstEjb)的JAR包。
3、问题:
(1)请问报错是什么意思?怎么打印不出结果呢?
JNDI没有初始化吗,我已经在EJB_01_Client的src目录下创建了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
(2)JBOSS需要配置环境变量吗?(我今天第一次接触JBOSS)



------解决方案--------------------
InitialContext context = new InitialContext(); 
如果要直接使用的话你的在EJB的容器里 你在外部类里的先设置url等属性
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
p.put(Context.PROVIDER_URL, "localhost:1099");
InitialContext context = new InitialContext(p);
------解决方案--------------------
根据报的错误来看,是因为new InitialContext(); 容器在初始的时候,构造方法里面需要传入一些参数。比如协议之类的东东。


------解决方案--------------------
我以前也碰到过这样的问题,你看书上或者别人写的例子上面没有传入参数也可以。但自己那样写却会报错。 不过你可以尝试一下把参数放进去,然后设置一些属性的值。再测试一下,看问题是否解决。
------解决方案--------------------
jndi.properties不会自动读的,可以手动:
Properties props = new Properties();
props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jndi.properties"));
InitialContext context = new InitialContext(props);
  相关解决方案