我在 glassfish3 上部署了一个带有 actionclasses 和一个外观的 war 文件,以及一个带有 ejb 组件(一个无状态 bean、几个实体和一个 persistence.xml)的 jar 文件。我的问题是我无法从我的门面找到到无状态 bean 的远程接口。
我的 bean 和界面如下所示:
@Remote
public interface RecordService {...
@Stateless(name="RecordServiceBean", mappedName="ejb/RecordServiceJNDI")
public class RecordServiceImpl implements RecordService {
@PersistenceContext(unitName="record_persistence_ctx")
private EntityManager em;...
如果我查看 server.log 便携式 jndi 看起来像:
Portable JNDI names for EJB RecordServiceBean : [java:global/recordEjb/RecordServiceBean, java:global/recordEjb/RecordServiceBean!domain.service.RecordService]|#]
和我的门面:
...InitialContext ctx= new InitialContext();
try{
recordService = (RecordService) ctx.lookup("java:global/recordEjb/RecordServiceBean!domain.service.RecordService");
}
catch(Throwable t){
System.out.println("ooops");
try{
recordService = (RecordService)ctx.lookup("java:global/recordEjb/RecordServiceImpl");
}
catch(Throwable t2){
System.out.println("noooo!");
}...
}
当外观第一次调用时,会发生此异常:
javax.naming.NamingException: Lookup failed for 'java:global/recordEjb/RecordServiceBean!domain.service.RecordService' in SerialContext [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacedomain.service.RecordService [Root exception is java.lang.ClassNotFoundException: domain.service.RecordService]]
第二个电话:
javax.naming.NamingException: Lookup failed for 'java:global/recordEjb/RecordServiceBean' in SerialContext [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacedomain.service.RecordService [Root exception is java.lang.ClassNotFoundException: domain.service.RecordService]]
我还测试了使用@EJB-annotation 注入bean:
@EJB(name="RecordServiceBean")
private RecordService recordService;
但这也不起作用。我错过了什么?我尝试使用 ejb-jar.xml 但这不应该是必要的。有没有人可以告诉我如何解决这个问题?