Pra*_*mha 7 java ejb java-ee ejb-3.0 glassfish-3
我是EJB新手,正在尝试"Hello World"类型的EJB Java程序.这是我的EJB:
package dukesbookstore.ejb;
@Stateless(name="BookRequestBean", mappedName="ejb/BookRequestBean")
@Named
public class BookRequestBean {
//Other codes here
}
Run Code Online (Sandbox Code Playgroud)
这是我的客户:
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
try {
InitialContext ctx = new InitialContext(prop);
ctx.lookup("ejb/BookRequestBean");
System.out.println("EJB Look-up successfull!!");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但每当我尝试运行时,我都会遇到异常:
javax.naming.NamingException:SerialContext中的'ejb/BookRequestBean'查找失败[myEnv = {org.omg.CORBA.ORBInitialPort = 3700,java.naming.factory.initial = com.sun.enterprise.naming.SerialInitContextFactory,org. omg.CORBA.ORBInitialHost = localhost,java
我已经加入appserv-rt.jar,gf-client.jar,javaee.jar,但仍没有运气.任何人都可以帮助我,我在这里缺少什么?我是Glassfish 3.1
这有几个原因:
1)您EJB未映射到JNDI名称.您需要检查是否EJB已成功部署并将其映射到JNDI名称.您可以检查Server GUI,Server Log on startup或使用Universal Test Client,看看是否EJB被正确映射.注意,UTC仅显示远程公开的 EJB.
2)您EJB只接触本地申请.在这种情况下,远程调用或跨应用程序调用(不同的EAR,WAR ...)EJB将失败.在此方案中,创建远程接口并公开它.本地接口将EJB暴露给本地调用.远程接口将EJB暴露给远程或跨应用程序调用.
3)您的RMI/IIOP 端口可能不正确.您可以检查Glassfish GUI或Server startup log查看分配的端口 RMI/IIOP.
注意:要诊断确切的问题,请发布完整的堆栈跟踪.
除了@RaviTrivedi 的精彩回答之外,这里还有一些想法:
@Named注释不应该这样使用name和mappedName,对于 Glassfish 只需使用mappedName