EJB3 Glassfish JNDI 查找
我正在使用 Glassfish 捆绑的 Eclipse IDE。我编写了一个简单的 EJB 应用程序。但它不起作用。
@Stateless
@Remote(CalculatorRemote.class)
@Local(CalculatorLocal.class)
public class Calculator implements CalculatorRemote, CalculatorLocal {
@Override
public String sayHello(String name) {
System.out.println("ejb:"+name);
return null;
}
}
----
@Remote
public interface CalculatorRemote {
public String sayHello(String name);
}
-------
@Local
public interface CalculatorLocal {
public String sayHello(String name);
}
我写了一个独立的客户端来测试,但失败了。找不到 JNDI。
public class Main {
public static void main(String[] args) throws Exception {
InitialContext ctx = new InitialContext();
CalculatorRemote bean = (CalculatorRemote) ctx.lookup("java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote");
bean.sayHello("Billy Bob");
}
}
在服务器日志中,它说
INFO: Portable JNDI names for EJB Calculator : [java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote, java:global/TestEAR/TEjb/Calculator!com.CalculatorLocal]
INFO: Glassfish-specific (Non-portable) JNDI names for EJB Calculator : [com.CalculatorRemote, com.CalculatorRemote#com.CalculatorRemote]
另外,我已经尝试过
ctx.lookup("com.CalculatorRemote")
仍然不起作用。
错误消息是
java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.Main.main(Main.java:9)
Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote' in SerialContext [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.Main.main(Main.java:9)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
... 2 more
Caused by: java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
... 3 more
请帮助我。
I am using Glassfish-bundled Eclipse IDE. I wrote a simple EJB application. but it doesn't work.
@Stateless
@Remote(CalculatorRemote.class)
@Local(CalculatorLocal.class)
public class Calculator implements CalculatorRemote, CalculatorLocal {
@Override
public String sayHello(String name) {
System.out.println("ejb:"+name);
return null;
}
}
----
@Remote
public interface CalculatorRemote {
public String sayHello(String name);
}
-------
@Local
public interface CalculatorLocal {
public String sayHello(String name);
}
I wrote a standalone client to test, but failed. can't find JNDI.
public class Main {
public static void main(String[] args) throws Exception {
InitialContext ctx = new InitialContext();
CalculatorRemote bean = (CalculatorRemote) ctx.lookup("java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote");
bean.sayHello("Billy Bob");
}
}
In the server log, it said
INFO: Portable JNDI names for EJB Calculator : [java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote, java:global/TestEAR/TEjb/Calculator!com.CalculatorLocal]
INFO: Glassfish-specific (Non-portable) JNDI names for EJB Calculator : [com.CalculatorRemote, com.CalculatorRemote#com.CalculatorRemote]
Also, I have tried
ctx.lookup("com.CalculatorRemote")
still doesn't work.
error message is
java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.Main.main(Main.java:9)
Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote' in SerialContext [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.Main.main(Main.java:9)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
... 2 more
Caused by: java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
... 3 more
Please help me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以添加以上几行吗:
我在这里使用 EJB3x 和 Glassfish v3 创建了一篇博客文章。
http://anirbanchowdhury.wordpress.com/ 2012/06/07/ejb-3-application-in-glassfish-3x/
Can you just add the above lines:
I have created a blog post here using EJB3x with Glassfish v3.
http://anirbanchowdhury.wordpress.com/2012/06/07/ejb-3-application-in-glassfish-3x/
我认为抛出异常是因为您没有正确配置初始上下文。创建一个 jndi.properties 文件,或者创建一个包含属性的哈希表,并将其发送到 IntialContext 的构造函数。
使用 Netbeans 和 Glassfish 创建 EJB3
I think that exception is thrown because you didn't configure the initial context properly. Either create a jndi.properties file, or create a hash table with the properties and it send it to the constructor of IntialContext.
Creating EJB3 using Netbeans and Glassfish
就在今天,我遇到了一个问题。
您的独立客户端失败,但它将在 GF EJB 容器内工作。
对于客户端测试,您需要两件事才能使其工作:
这些 jar 需要位于您的类路径中。这很愚蠢,但我还不知道 2) 中的最小 jar 才能使其工作。
Just today I had an issue with this.
Your standalone client failed but it will work inside GF EJB container.
For client testing you need 2 things to make it work:
These jars need to be in your classpath. It is silly but I don`t know yet the minimum jars from 2) in order to make it work.
解决方案如下。
在下面的代码中,您必须在另一个JVM中调用bean,对吗?例如,你的主要课程
JRE 中使用的是 BEAN,Glassfish JVM 中使用的是 BEAN。
代码部分正确。但是您的类需要更多编码。
浏览此链接,您可以遵循的完整示例。
Solution is as below.
In the code below, You have to call a bean in another JVM Right ? For ex, your main class
is in JRE and BEAN is in Glassfish JVM.
The code is partially right. But more coded is needed to your class..
Go through this link, complete example you can follow.
======================= =======
包 com.au.ejbs;
==============================
package com.au.ejbs;