Java 在EJB示例中获取错误

Java 在EJB示例中获取错误,java,ejb,Java,Ejb,我正在尝试从中实现一个EJB示例 但是客户端的EJBTester.java给出了一个错误: java.io.FileNotFoundException: jndi.properties (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:146) at j

我正在尝试从中实现一个EJB示例

但是客户端的EJBTester.java给出了一个错误:

java.io.FileNotFoundException: jndi.properties (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileInputStream.<init>(FileInputStream.java:101)
    at com.tutorialspoint.test.EJBTester.<init>(EJBTester.java:23)
    at com.tutorialspoint.test.EJBTester.main(EJBTester.java:37)
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:674)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
    at javax.naming.InitialContext.init(InitialContext.java:242)
    at javax.naming.InitialContext.<init>(InitialContext.java:216)
    at com.tutorialspoint.test.EJBTester.<init>(EJBTester.java:28)
    at com.tutorialspoint.test.EJBTester.main(EJBTester.java:37)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:278)
    at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:72)
    at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:61)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671)
    ... 5 more
java.lang.NullPointerException
    at com.tutorialspoint.test.EJBTester.testStatelessEjb(EJBTester.java:51)
null
    at com.tutorialspoint.test.EJBTester.main(EJBTester.java:39)
java.io.FileNotFoundException:jndi.properties(没有这样的文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:146)
位于java.io.FileInputStream。(FileInputStream.java:101)
位于com.tutorialspoint.test.EJBTester(EJBTester.java:23)
位于com.tutorialspoint.test.EJBTester.main(EJBTester.java:37)
javax.naming.NoInitialContextException:无法实例化类:org.jnp.interfaces.NamingContextFactory[根异常为java.lang.ClassNotFoundException:org.jnp.interfaces.NamingContextFactory]
位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:674)
位于javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
位于javax.naming.InitialContext.init(InitialContext.java:242)
位于javax.naming.InitialContext。(InitialContext.java:216)
位于com.tutorialspoint.test.EJBTester(EJBTester.java:28)
位于com.tutorialspoint.test.EJBTester.main(EJBTester.java:37)
原因:java.lang.ClassNotFoundException:org.jnp.interfaces.NamingContextFactory
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:278)
位于com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:72)
位于com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:61)
位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671)
... 还有5个
java.lang.NullPointerException
在com.tutorialspoint.test.EJBTester.teststatelezeejb(EJBTester.java:51)上
无效的
位于com.tutorialspoint.test.EJBTester.main(EJBTester.java:39)
你能给我一个很好的例子,从中我可以清楚我的EJB概念吗?

你的代码(从注释中)

将尝试从工作目录加载
jndi.properties

只需执行以下操作:

InitialContext initialContext = new InitialContext();
这将从类路径的根作为资源加载
jndi.properties

如果您确实想要加载
jndi.properties
(从类路径)显式地使用以下命令

ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream input = loader.getResourceAsStream("jndi.properties");
if (input == null) {
    throw new IllegalStateException("Could not find jndi.properties in class path");
}
props.load(input);

你能展示一下你的代码+结构吗。您是显式加载
jndi.properties
还是将其放在类路径上?我是显式添加jndi.properties。在src文件夹中。我正在为EJBTester类打包“com.tutorialspoint.test”时,您是否显式加载了
jndi.properties
?我正在src文件夹中创建jndi.properties文件。您如何实例化
InitialContextFactory
?谢谢,这是我们的工作。非常感谢
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream input = loader.getResourceAsStream("jndi.properties");
if (input == null) {
    throw new IllegalStateException("Could not find jndi.properties in class path");
}
props.load(input);