2014-12-19 167 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

你不需要重申有關JNDI的信息在你的代碼,如果你正在使用JBoss的EJB -client.properties。你是否檢查過ejb-client.properties是否在客戶端的類路徑中? – 2014-12-19 08:13:38

+0

我發現密碼和用戶名可以傳遞給我的自定義領域。但是,每次運行程序時都會返回隨機密碼。此外,我已經刪除了ejb-clioent-properties並在程序中配置了jndi設置。 我的問題類似於這個問題(http://stackoverflow.com/questions/18181141/jboss7-custom-login-module-not-working),但我按照他的jndi配置,它仍然返回隨機密碼 – PrimaryChicken 2014-12-19 09:37:01

回答

1

我測試在JBoss 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 2014-12-23 03:19:45

+0

我不知道你有一個自定義登錄模塊。我認爲這會帶來另一個問題 - 你能否提出一個新問題? – zbig 2014-12-23 10:09:42