2014-12-19 4 views
1

EJB를 호출하는 독립 실행 형 프로그램을 작성 중입니다. 그리고 EJB는 로컬 JBoss 서버에 배포됩니다. 여기 지침을 따르십시오 : 내 주요 문제를 실행하면 http://www.mastertheboss.com/jboss-server/jboss-as-7/jboss-as-7-remote-ejb-client-tutorial?showall=원격 EJB 호출

, 그것은

javax.ejb.EJBAccessException: JBAS013323: Invalid User 
javax.ejb.EJBAccessException: JBAS013323: Invalid User 
at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:54) 
at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:45) 
at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:78) 

사람이 내가 놓친 거지 알고 있나요을 던져? 도와 주셔서 감사합니다.

내 주요 프로그램 :

private void start() throws Exception { 

    logger.info("----------------------program start--------------------------");  
    Context context = null;   
    try { 
     init();   
     final Hashtable<String, Object> jndiProperties = new Hashtable<>(); 
     jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 
     jndiProperties.put("jboss.naming.client.ejb.context",true); 
     jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
     jndiProperties.put(Context.PROVIDER_URL,"remote://localhost:4447"); 

     context = new InitialContext(jndiProperties); 

     GrainReportManagerRemote grainReportManagerRemote = (GrainReportManagerRemote) context.lookup("java:GrainEar/GrainEJB/GrainReportManager!"+ GrainReportManagerRemote.class.getName()); 
     grainReportManagerRemote.export(); 

    } catch (Exception e) { 
     logger.error(e, e); 
    } finally { 
     if (context != null) 
      context.close(); 
    } 

    logger.info("----------------------program end--------------------------"); 
} 

jboss-ejb-client.properties :

endpoint.name = client-endpoint 
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS = false 
remote.connection.default.host              = localhost 
remote.connection.default.port              = 4447 
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED    = false 
remote.connections                 = default 
remote.connection.default.username=appuser 
remote.connection.default.password=appuser`123 
+0

은 JBoss-EJB를 사용하는 경우에는, 코드에서 JNDI에 대한 정보를 반복 할 필요가 없습니다 -client.properties. ejb-client.properties가 클라이언트의 classpath에 있는지 확인 했습니까? –

+0

암호와 사용자 이름을 내 사용자 지정 영역으로 전달할 수있는 것으로 나타났습니다. 그러나 매번 프로그램을 실행할 때 임의의 암호를 반환합니다. 게다가, 나는 ejb-clioent-properties를 제거하고 프로그램에서 jndi 설정을 구성했다. 내 문제는이 질문 (http://stackoverflow.com/questions/18181141/jboss7-custom-login-module-not-working)과 유사하지만 그의 jndi 구성을 따르고 여전히 임의의 암호를 반환합니다 – PrimaryChicken

답변

1

나는 제이 보스 7.1.1에 코드를 테스트하고 그것은 나에게 또 다른 예외를 제공합니다 SaslException: Authentication failed

나를 위해 일한 두 가지를 시도하십시오.

중 하나를 추가

jndiProperties.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false"); 

또는 그 3 줄을 제거 :

jndiProperties.put("jboss.naming.client.ejb.context",true); 
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
jndiProperties.put(Context.PROVIDER_URL,"remote://localhost:4447"); 
+0

내 프로그램 이제 EJB를 검색하고 사용자 정의 로그인 모듈로 이동할 수 있습니다. 그러나 암호는 jndi 속성에서 설정 한 경우에도 항상 임의의 값을 반환합니다. jndiProperties.put (Context.SECURITY_CREDENTIALS, "password"); 이 문제를 해결할만한 아이디어가 있습니까? – PrimaryChicken

+0

커스텀 로그인 모듈이 있다는 것을 몰랐습니다. 나는 이것이 또 다른 문제를 열어 놓은 것 같은데 - 당신은 새로운 질문을 할 수 있습니까? – zbig