2015-10-21 2 views
0

Я не могу искать локальные сеансовые компоненты из модуля EJB в WebLogic 10.3.6.Локальный сеансовый компонент JNDI-поиск в WebLogic - NameNotFoundException

В следующем примере я использую инъекцию, но в реальном продукте нам нужно получить доступ к локальным компонентам сеанса из не управляемых объектов, поэтому это необходимо для демонстрации проблемы. Я также знаю, что он будет работать с удаленным интерфейсом, но почему, поскольку я должен быть в состоянии сделать это локально.

@Local 
public interface MyBeanLocal { 

    public void foo(); 

} 

@Stateless(name = "MyBean") 
public class MyBean implements MyBeanLocal { 

    @Override 
    public void foo() { 
     System.out.println("Foo");  
    } 

} 

Здесь клиент пытается найти местный сеансовый компонент. Этот же код работает на других серверах приложений, но не в WebLogic.

@Stateless 
public class CustomerInbound implements CustomerInboundLocal { 

    @Override 
    public void someOperation() throws Exception { 

     try { 

      // Exception is thrown here when looking up the object 
      MyBeanLocal testLocal = (MyBeanLocal) 
        new InitialContext().lookup("java:comp/env/MyBean"); 

      testLocal.foo(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      throw e; 
     } 
    } 
} 

Исключение:

javax.naming.NameNotFoundException: While trying to look up comp/env/MyBean in /app/ejb/test-inject#CustomerInbound.; remaining name 'comp/env/MyBean' 
    at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139) 
    at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:144) 
    at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:254) 
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:412) 
    at weblogic.jndi.factories.java.ReadOnlyContextWrapper.lookup(ReadOnlyContextWrapper.java:45) 
    at weblogic.jndi.internal.AbstractURLContext.lookup(AbstractURLContext.java:130) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at beans.CustomerInbound.someOperation(CustomerInbound.java:16) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.oracle.pitchfork.spi.MethodInvocationVisitorImpl.visit(MethodInvocationVisitorImpl.java:34) 
    at weblogic.ejb.container.injection.EnvironmentInterceptorCallbackImpl.callback(EnvironmentInterceptorCallbackImpl.java:54) 
    at com.oracle.pitchfork.spi.EnvironmentInterceptor.invoke(EnvironmentInterceptor.java:42) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy134.someOperation(Unknown Source) 
    at beans.CustomerInbound_xaxie8_CustomerInboundLocalImpl.__WL_invoke(Unknown Source) 
    at weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:39) 
    at beans.CustomerInbound_xaxie8_CustomerInboundLocalImpl.someOperation(Unknown Source) 
    at beans.CustomerWSFacade.customerIn(CustomerWSFacade.java:16) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.oracle.pitchfork.spi.MethodInvocationVisitorImpl.visit(MethodInvocationVisitorImpl.java:34) 
    at weblogic.ejb.container.injection.EnvironmentInterceptorCallbackImpl.callback(EnvironmentInterceptorCallbackImpl.java:54) 
    at com.oracle.pitchfork.spi.EnvironmentInterceptor.invoke(EnvironmentInterceptor.java:42) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) 
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) 
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy133.customerIn(Unknown Source) 
    at beans.CustomerWSFacade_jg1q6w_WSOImpl.__WL_invoke(Unknown Source) 
    at weblogic.ejb.container.internal.WSOMethodInvoker.invoke(WSOMethodInvoker.java:22) 
    at beans.CustomerWSFacade_jg1q6w_WSOImpl.__WL_customerIn_WS(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at weblogic.wsee.server.ejb.WsEjb.invoke(WsEjb.java:54) 
    at weblogic.wsee.jaxws.WLSEjbInstanceResolver$WLSEjbInvoker.invoke(WLSEjbInstanceResolver.java:192) 
    at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:74) 
    at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:151) 
    at com.sun.xml.ws.server.sei.EndpointMethodHandlerImpl.invoke(EndpointMethodHandlerImpl.java:268) 
    at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:100) 
    at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:866) 
    at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:815) 
    at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:778) 
    at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:680) 
    at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:403) 
    at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:539) 
    at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:253) 
    at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:140) 
    at weblogic.wsee.jaxws.WLSServletAdapter.handle(WLSServletAdapter.java:171) 
    at weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke.run(HttpServletAdapter.java:708) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146) 
    at weblogic.wsee.util.ServerSecurityHelper.authenticatedInvoke(ServerSecurityHelper.java:103) 
    at weblogic.wsee.jaxws.HttpServletAdapter$3.run(HttpServletAdapter.java:311) 
    at weblogic.wsee.jaxws.HttpServletAdapter.post(HttpServletAdapter.java:336) 
    at weblogic.wsee.jaxws.JAXWSServlet.doRequest(JAXWSServlet.java:99) 
    at weblogic.servlet.http.AbstractAsyncServlet.service(AbstractAsyncServlet.java:99) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 

ответ

0

Вы должны объявить ссылку на EJB, чтобы посмотреть его от java:comp. Вы можете использовать аннотацию @EJB (с инъекцией или без нее, см. What does the @EJB annotation do?), или вы можете объявить ссылку в web.xml с помощью <ejb-ref>.

В противном случае, если вы используете более новую версию WebLogic, которая поддерживала EE 6, вы можете использовать портативные java:global, java:app или java:module пространств имен для того, чтобы посмотреть вверх EJB непосредственно, но так как WebLogic 10.3.6 поддерживает только Е.Е. 5, вам нужно будет использовать настроенное имя привязки EJB.

+0

Я должен сделать это в модуле EJB, поэтому я не смогу использовать web.xml. Я попытался применить '@ EJB' к моему сеансовому компоненту, но я получаю ту же ошибку при попытке найти bean-компонент, следуя инструкциям ссылки. Можете ли вы продемонстрировать, как должны быть установлены значения '@ EJB', и как должна соответствовать строка поиска? – BonanzaOne

+0

@BonanzaOne Я не понимаю, поскольку CustomerInbound аннотируется '@ WebService', что имеет смысл только в веб-модуле. Вы можете уточнить? Можете ли вы показать больше стека из отказа поиска (чтобы я мог видеть, какой контейнер вызывает CustomerInbound)? Можете ли вы показать аннотацию '@ EJB', которую вы пытались добавить в CustomerInbound? –

+0

Не беспокойтесь о '@ WebService', я создал его только для тестирования. Я удалил его из кода, чтобы избежать дальнейшей путаницы. Он работает, и на самом деле он работает во многих других серверах, веб-модуль не требуется (возможно, он создается под капотом). – BonanzaOne