GF 2.1.1 (Java 6)에서 JBoss EAP 6.3.0 (Java 7)으로 웹 애플리케이션을 마이그레이션하고 GF에서 하나의 EJB를 사용하여 JBoss로 마이그레이션 할 때까지 얼마 동안 사용해야합니다. -JBoss EAP 6에 배포 된 웹 응용 프로그램에서 GlassFish 2 서버에 배포 된 EJB에 액세스하는 방법은 무엇입니까?
일 이전에 우리가 GF의 외부 JNDI 자원 사용이 EJB에 연결 :
<external-jndi-resource enabled="true"
factory-class="com.sun.enterprise.naming.SerialInitContextFactory"
jndi-lookup-name="ejb/NameOfEJB" jndi-name="ejb/NameOfEJB"
object-type="user" res-type="name.of.ejb.interfaces.NameOfEJB">
<property name="org.omg.CORBA.ORBInitialPort" value="3700"/>
<property name="org.omg.CORBA.ORBInitialHost" value="hostname.of.ejb"/>
</external-jndi-resource>
아직 JB에 이와 유사한 아무것도 찾을 수 없습니다. JB는 던지기 시작하는 것이 내가 GF의 libs와 (추가하려고 할 때,
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", zoneHost);
props.setProperty("org.omg.CORBA.ORBInitialPort", zonePort);
InitialContext ic = new InitialContext(props);
Object obj = ic.lookup("ejb/NameOfEJB");
하지만 모든 예외를 제거 할 수 없습니다 : -
이 나는 GF의 구현을 사용하여 코드를 통해이 EJB에 도달하기 위해 노력 appserv-rt.jar ...)이이 접근법을 사용해야했습니다.
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.ejb.client.naming");
props.put("jboss.naming.client.ejb.context", true);
props.setProperty(Context.PROVIDER_URL, "remote://" + zoneHost+ ":" + zonePort);
// also tried to add Context.SECURITY_PRINCIPAL and CREDENTIALS properties, but they didn't change anything
InitialContext ic = new InitialContext(props);
Object obj = ic.lookup("ejb/NameOfEJB");
오초 후에 시간 초과 결과 : -
3은 또한 JB의 구현을 사용하여 코드를 통해이 EJB에 도달하기 위해 노력했다.
JBoss에서 (1)과 같은 작업을 수행 할 수 있습니까? 그것은 최선의 선택이 될 것입니다.
JBoss에서 GF 접근 (2)이 가능합니까?
JB 접근 방식 (3)을 사용해야하는 경우 무엇이 잘못 되었습니까?
호스트/포트에 액세스 할 수 있으므로 동일한 컴퓨터의 GF 서버에서이 EJB에 액세스 할 수 있습니다. 나는 또한 [이 접근법] (https://docs.jboss.org/author/display/AS72/EJB+invocations+from+a+remote+client+using+JNDI)을 시도했지만 JBoss는 그렇지 않습니다. 내가 제공 한 jboss-ejb-client.properties를 읽고 싶다. 이 Exception에서 java.lang.IllegalStateException : EJBCLIENT000025 : 호출 문맥에 대한 [appName : NameOfEJB, moduleName : NameOfEJB, distinctName :] 조합의 처리를 위해 EJB 수신기를 사용할 수 없음 org.jboss.ejb.client.EJBClientInvocationContext @ 1061db9' 나는 로컬 EJB 만 검사했습니다 – RunninglVlan
디버깅을 조금했는데 jboss-client가 JBoss의 다른 (로컬) 배포 된 응용 프로그램에만 조회 이름을 비교한다는 것을 알았습니다. 그것은 심지어 원격 서버에 연결하려고 시도하지 않는 것 같습니다. 그래서 jboss-ejb-client.properties를 읽지 않았거나 적어도 그 속성을 사용하지 않았다고 생각합니다. jboss-ejb-client.properties를 사용하여 접근법을 올바르게 사용하는 방법을 말하는 사람이 있다면 도움이 될 것입니다. – RunninglVlan