2012-12-11 43 views
0

我正在試圖從本書中構建一個關於JBoss 5(JBoss AS 5 Developmet)的示例,但是即使直接來自本書的代碼根本不起作用。未部署在JBoss AS 5.0.x上的EJB

這是我的接口:

@Remote 
public interface Mailer { 

    public void sendMail(String aToEmailAddr, 
         String aSubject, String aBody); 

} 

這是EJB實現此接口

這是它試圖查找bean的客戶端應用程序。

public class MailClient { 
    public static void main(String[] args) throws Exception 
     { 
      InitialContext ctx = new InitialContext(); 
      Mailer mailer = (Mailer) ctx.lookup("remote/MailerEJB"); 


     } 

} 

當我嘗試運行的MailClient類Ive得到了以下異常

Exception in thread "main" javax.naming.NameNotFoundException: remote not bound 

我也有jndi.properties文件,我添加到構建路徑,它看起來像這樣>

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory 
java.naming.provider.url=jnp://localhost:1099 
java.naming.factory.url.pkgs=org.jnp.interfaces 

即使在jmx控制檯中,我也不能看到remote/MailerEJB Bean。

進出口使用jboss-5.0.1.GA + JBDS +的Java 1.7.0

有人可以幫我嗎?

+0

是否將'java.naming.factory.url.pkgs'設置爲'org.jboss.naming.client'幫助? –

回答

1

首先,您必須確定EJB已在JBoss中正確部署,並且已獲得綁定名稱,因此如果您無法在JMX控制檯的JNDIView中看到該Bean,那肯定是部署問題。爲了確保它的正確部署,您可以在部署EJB(您EJB-JAR或耳朵)的時刻檢查JBoss的日誌,查找類似的行:

EJBBindingName - EJB3.x Default Remote Business Interface 

在你的情況下,如果綁定你定義是正確的,它應該是:

remote/MailerEJB - EJB3.x Default Remote Business Interface 

此行表示是考慮到EJB真正的JNDI名稱,它就是你在你的遠程調用使用一個。

在另一方面,嘗試刪除註釋和類定義之間的界線:

@Stateless 
@RemoteBinding(jndiBinding="remote/MailerEJB") 
public class MailerBean implements Mailer {... } 

而且在this post你可以找到關於如何從一個簡單的做一個遠程調用到EJB的具體說明命令行Java程序。

+0

那麼,我確定我的EJB沒有部署,正如我所說我沒有在jmx-console或jboss服務器日誌中看到它。 –

+0

在這種情況下,問題不在於遠程訪問EJB,而在於EJB本身。當你部署EJB時,你應該在日誌文件中看到一些東西,至少是錯誤的。你可以檢查日誌文件的部署錯誤嗎? – Toni

+0

那就是問題,這個EJB在我的日誌中絕對沒有。 http://pastebin.com/ehGUCbp7。看來這些註釋完全被忽略了。 –