나는 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가를 해결하는 방법을 아주 확실하지 않다.
조회 문자열에서이 양식을 사용했으며 동일한 예외가 발생합니다. 현재 사용하고있는 양식은 원격 클라이언트뿐만 아니라 앱의 다른 곳에서도 성공적으로 작동합니다. – Josiah