1

Glassfish 3.1.2 に ear をデプロイし、Web サービスの @PostConstruct メソッドから EJB Bean を検索しようとしています。

   @PostConstruct
   public void init()
   {
      try
      {
         InitialContext initialContext = new InitialContext();

         browserService = (IBrowserService) initialContext.lookup("java:comp/env/BrowserService");
      }
      catch (NamingException ex)
      {
         Logger.getLogger(BrowserWS.class.getName()).log(Level.SEVERE, null, ex);
      }

   }

そして得た

[#|2012-04-25T10:15:54.768+0300|SEVERE|glassfish3.1.2|browser.service.BrowserWS|_ThreadID=22;_ThreadName=admin-thread-pool-4848(4);|javax.naming.NamingException : SerialContext[myEnv={java.naming.factory.initial=com.sun.enterpri se.naming.impl.SerialInitContextFactory, java.naming.factory.state=com. sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.ur l.pkgs=com.sun.enterprise.naming} [ルート例外は javax.naming.NamingException: Invocation exception: Got null ComponentInvocation ] com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518) で com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) で

Webメソッドから同じことをしようとすると、すべて正常に動作します。

@WebMethod
   public XmlLookupResult lookup(
      @WebParam(name = "inLookupId", mode = WebParam.Mode.IN) String id,
      @WebParam(name = "inLookupParams", mode = WebParam.Mode.IN) List<String> params,
      @WebParam(name = "inFetchLimit", mode = WebParam.Mode.IN) int limit)
   {

      try
      {
         InitialContext initialContext = new InitialContext();

         browserService = (IBrowserService) initialContext.lookup("java:comp/env/BrowserService");
      }
      catch (NamingException ex)
      {
         Logger.getLogger(BrowserWS.class.getName()).log(Level.SEVERE, null, ex);
      }

      return browserService.lookup(id, params, limit);
   }

では、@PostConstruct メソッドから Bean を検索できないのはなぜですか?

仕様から、PostConstruct から java:comp/env への JNDI アクセスが可能です...

ありがとう

更新:

web.xml で次のように宣言された BrowserService

<ejb-local-ref>
   <ejb-ref-name>BrowserService</ejb-ref-name>
   <local>browser.service.IBrowserService</local>
</ejb-local-ref>
4

0 に答える 0