내 응용 프로그램은 JNDI를 사용하여 로컬 EJB에 액세스하고 RMI를 통해 원격 서비스에 액세스합니다. 현재이 다음과 같은 방식으로 처리됩니다EJB 및 RMI를 사용하여 여러 jndi 구성 처리
public MyLocalEJB getMyLocalEJB(){
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"));
env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"));
InitialContext ctx = new InitialContext(environment);
return (MyLocalEJB)ctx.lookup("MyEar/MyBean/local");
}
public RemoteServiceInterface getRemoveService(){
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.ApplicationClientInitialContextFactory"));
env.put(Context.PROVIDER_URL, "ormi://server:port/APPNAME");
env.put(Context.SECURITY_PRINCIPAL, "user");
env.put(Context.SECURITY_CREDENTIALS, "secret");
InitialContext ctx = new InitialContext(environment);
return (RemoteServiceInterface)ctx.lookup("ejb/service/RemoteService");
}
이 Context.PROVIDER_URL 앞뒤로 변경 속성을 이후 타이밍 문제가 발생 java.naming.provider.url에보다 우선하기 때문에 비록 몇 가지 문제를 줄 것으로 보인다. 예를 들어, Hibernate Sessionfactory는 로컬이 아닌 RMI 공급자 URL을 얻을 때 공급자 URL이 잘못되었다는 경고를 던지고 JBoss는 jndi 바인딩에 대한 종료시 여러 예외를 throw합니다.
나는 여러 공급 업체의 URL을 지정할 수있는 읽기, 그래서 두 방법 모두에 다음과 같은 시도 : 이env.put(Context.PROVIDER_URL, "jnp://localhost:1099,ormi://server:port/APPNAME");
이 오류를 제거,하지만 여전히 다른 매개 변수를 지속적으로 어떤 방법에 따라 변경 이후 나쁜 느낌 마지막으로 호출되었습니다 (사용자 이름/패스는 로컬 ejbs에 액세스 할 때 사용하면 안됩니다).
이 구현의 핵심에는 뭔가 잘못되었다고 가정합니다. 어떻게 제대로 수행되어야할까요?
하지만 initialcontexts는 환경을 공유합니다. 공급자 URL을 사용하여 새 InitialContext를 만들면 새 환경을 재정의 할 때까지 전역 환경을이 값으로 설정합니다. 이것에 의해, 프로 바이더 url가 지정되어 있지 않고, 디폴트의 프로 바이더 URL이 사용되는 용도로 문제가 발생합니다. 환경 변수 java.naming.provider.url을 직접 수정하지 않습니다. 그러나 다른 클래스의 LDAP 호출에서 사용되지만 여기서는 관련성이 있다고 생각하지 않습니다. –