2013-03-19 1 views
1

나는 Stateless ejb를 가지고 있습니다.@ejb 주입이 작동합니다. Glassfish 3에서는 jndi 조회가 수행되지 않습니다.

나는 JMX를 통해 노출 될 MyService를 사용하려고하는 또 다른 빈을 가지고있다. 내가이면 MyService를 제공 ​​귀에 배포 의존성을하지 않아도 내가 좋아하는 것

@MXBean 
public interface MyJMXBean { 
    ... 
} 

@Singleton 
@Startup 
public class MyJMXBeanImpl implements MyJMXBean { 
    @EJB 
    MyService service; // this works 

    @PostConstruct 
    private void init() { ... } 

    @PreDestroy 
    private void cleanup() { ... } 

    // this doesn't 
    private MyService doLookup() { 
     InitialContext ctx = new InitialContext(); 
     return (MyService) ctx.lookup(MyService.class.getName()); 
    } 
} 

는이면 MyService의 JNDI 룩업을 할 수 있습니다. MyService와 MyJMXBean을 제공하는 귀는 다르지만 동일한 컨테이너에 배포됩니다. 내가 갖는 예외입니다 :

Caused by: javax.naming.CommunicationException: Communication exception for SerialContext[myEnv={java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:542) ~[glassfish-naming.jar:3.1.2.1-SNAPSHOT] 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) ~[glassfish-naming.jar:3.1.2.1-SNAPSHOT] 
     at javax.naming.InitialContext.lookup(InitialContext.java:411) ~[na:1.7.0_15] 
     at javax.naming.InitialContext.lookup(InitialContext.java:411) ~[na:1.7.0_15] 
     at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(RemoteBusinessObjectFactory.java:71) ~[ejb-container.jar:3.1.2.1-SNAPSHOT] 
     at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:580) ~[glassfish-naming.jar:3.1.2.1-SNAPSHOT] 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:514) ~[glassfish-naming.jar:3.1.2.1-SNAPSHOT] 
     ... 38 common frames omitted 
Caused by: org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation com.sun.corba.ee.impl.orb.ORBImpl 
     at org.omg.CORBA.ORB.create_impl(ORB.java:314) ~[na:1.7.0_15] 
     at org.omg.CORBA.ORB.init(ORB.java:353) ~[na:1.7.0_15] 
     at com.sun.jndi.toolkit.corba.CorbaUtils.getOrb(CorbaUtils.java:203) ~[na:1.7.0_15] 
     at com.sun.jndi.cosnaming.CNCtx.getDefaultOrb(CNCtx.java:72) ~[na:1.7.0_15] 
     at com.sun.jndi.cosnaming.CNCtx.initOrbAndRootContext(CNCtx.java:234) ~[na:1.7.0_15] 
     at com.sun.jndi.cosnaming.CNCtx.<init>(CNCtx.java:105) ~[na:1.7.0_15] 
     at com.sun.jndi.cosnaming.CNCtxFactory.getInitialContext(CNCtxFactory.java:49) ~[na:1.7.0_15] 
     at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684) ~[na:1.7.0_15] 
     at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) ~[na:1.7.0_15] 
     at javax.naming.InitialContext.init(InitialContext.java:242) ~[na:1.7.0_15] 
     at javax.naming.InitialContext.<init>(InitialContext.java:216) ~[na:1.7.0_15] 
     at com.sun.enterprise.naming.util.IIOPObjectFactory.getObjectInstance(IIOPObjectFactory.java:73) ~[glassfish-naming.jar:3.1.2.1-SNAPSHOT] 
     at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:580) ~[glassfish-naming.jar:3.1.2.1-SNAPSHOT] 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:514) ~[glassfish-naming.jar:3.1.2.1-SNAPSHOT] 
     ... 44 common frames omitted 
Caused by: java.lang.ClassNotFoundException: com.sun.corba.ee.impl.orb.ORBImpl 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0_15] 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_15] 
     at java.security.AccessController.doPrivileged(Native Method) [na:1.7.0_15] 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_15] 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) ~[na:1.7.0_15] 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_15] 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ~[na:1.7.0_15] 
     at java.lang.Class.forName0(Native Method) ~[na:1.7.0_15] 
     at java.lang.Class.forName(Class.java:266) ~[na:1.7.0_15] 
     at org.omg.CORBA.ORB.create_impl(ORB.java:312) ~[na:1.7.0_15] 
     ... 57 common frames omitted 

나는 모든 글래스 피시 내에서 실행되는 한, ClassNotFoundException가를 해결하는 방법을 아주 확실하지 않다.

답변

0

글래스 피쉬 V3는 EJB 3.1을 지원하며

java:global[/<app-name>]/<module-name>/<bean-name> 

<bean-name> 세션 빈의 EJB 이름에 해당하는 아래로 EJB 3.1 휴대용 글로벌 세션 빈의 JNDI 이름에 대한 구문을 구현합니다. 기본값은 세션 bean 클래스의 규정되지 않은 값입니다. @Stateless/@Stateful/@Singleton 주석의 name 속성을 사용하여 명시 적으로 지정할 수 있습니다.

JNDI 트리에서 조회 한 내용은 EJB 클래스의 정규화 된 이름입니다.

자세한 내용은 GlassFish EJB FAQ을 확인하십시오.

+0

조회 문자열에서이 양식을 사용했으며 동일한 예외가 발생합니다. 현재 사용하고있는 양식은 원격 클라이언트뿐만 아니라 앱의 다른 곳에서도 성공적으로 작동합니다. – Josiah

관련 문제