2014-11-20 15 views
0

Glassfish에서 TomEE로 이전 응용 프로그램을 마이그레이션하려고합니다. JNDI에 관한 문제가 발생했습니다. 내가 글래스 피시 서버 asadmin list-jndi-entries에 대한 cmd를 실행하면글래스 피쉬와 TomEE의 JNDI 구성 차이점은 무엇입니까?

는 좀 JNDI 항목을 얻을 :

java:global: com.sun.enterprise.naming.impl.TransientContext 
UserTransaction: com.sun.enterprise.transaction.TransactionNamingProxy$UserTransactionProxy 
com: com.sun.enterprise.naming.impl.TransientContext 
OURAPPSERVER-Q2: com.ourcompany.product.OurAppServer 
com.sun.enterprise.container.common.spi.util.InjectionManager: com.sun.enterprise.container.common.impl.util.InjectionManagerImpl 
ejb: com.sun.enterprise.naming.impl.TransientContext 
jdbc: com.sun.enterprise.naming.impl.TransientContext 
AppServer: com.sun.enterprise.naming.impl.TransientContext 

당신이 볼 수 있듯이, AppServer를 JNDI의 항목이 있습니다. 이 항목은 코드에서 수동으로 바인드됩니다.

 try { 
      InitialContext context = new InitialContext(); 
      context.rebind("AppServer/facede", this); 
     } catch (NamingException e) { 
      e.printStackTrace(); 
      logger.severe("Unable to register the service facade bean, " 
        + "JPOS will not be able to access services"); 
     } 

이 코드는 TomEE에서 작동하지 않습니다.

javax.naming.NameNotFoundException: Name [AppServer/facede] is not bound in this Context. Unable to find [AppServer]. 
    at org.apache.naming.NamingContext.bind(NamingContext.java:899) 
    at org.apache.naming.NamingContext.rebind(NamingContext.java:225) 

그것은 AppServer를에 상황에 맞는 기본 찾을 수없는 용기처럼 보인다 : 내가 좋아하는 몇 가지 오류가 발생합니다.

저는 JNDI의 마스터가 아닙니다. 그런 다음 몇 가지 서류를 확인했습니다. java : comp/env /는 기본 네임 스페이스입니다. DBCTM DataSource 참조의 경우 "jdbc", JMS 연결 팩토리의 경우 "jms", JavaMail 연결 팩토리의 경우 "mail", URL 연결 팩토리의 경우 "url"입니다.

이전 응용 프로그램 코드를 너무 많이 변경하고 싶지는 않습니다. 글래스 피쉬의 특별한 기능은 사용하지 않습니다. 올바른 방법으로 JNDI를 정의하는 방법을 알고 싶습니다.

글래스 피시가 AppServer을 네임 스페이스로 사용할 수있는 이유는 누구에게 말해 줄 수 있습니까?하지만 TomEE는 사용할 수 없습니다.

답변

1

Tomcat (TomEE)은 런타임시 JNDI를 변경하도록 설계되지 않았습니다. 단순히이 패턴을 사용하는 것이 아니라 문맥 적 리소스를 사용하는 것이 가장 좋습니다. 원하는 리소스를 삽입하십시오. JNDI 대신 리소스를 변경하면됩니다 (이는 실제로 영향을줍니다)

+0

정확합니다. 문서를 확인한 후 TomEE JNDI 컨텍스트는 런타임에만 준비가되었습니다. 구성 파일에 표준 JNDI 이름을 만들어야합니다. – Chris