【问题标题】:Remote interface lookup-problem in Glassfish3Glassfish3 中的远程接口查找问题
【发布时间】:2010-05-21 07:21:39
【问题描述】:

我在 glassfish3 上部署了一个带有动作类和外观的 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 但这不应该是必要的。有谁可以告诉我如何解决这个问题?

【问题讨论】:

    标签: glassfish ejb-3.0 jndi glassfish-3


    【解决方案1】:

    我找到了解决这个问题的方法。如果我将 interfacefile 打包到 jarfile 中并将该 jar 放入 warfile 中的 WEB-INF/lib 中,问题就解决了。

    【讨论】:

      【解决方案2】:

      服务器启动时,接口的全局 jndi 名称显示在控制台中。 使用这些来查找接口,而不是尝试通过显式命名来调用它们。

      【讨论】:

        【解决方案3】:

        您是否尝试过注释掉 所有 xml 文件中与 ejb 相关的部分,然后只使用

        @Stateless
        public class RecordServiceImpl implements RecordService {
        
        and then 
        
        @EJB
        private RecordService recordService;
        

        他们试图在 EJB 3.1 中让这个过程相当脑残 此外,虽然 JNDI 浏览没有进入 gf 3.0,但您可以使用

        挖掘一些信息
        asadmin list-jndi-entries --context java:global/yourAppName
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-05
          • 2019-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多