2009-10-07 177 views
1

我創建了一個EJB 2.我將它部署在JBoss-IDE 1.6上,然後創建了一個JUnit測試來訪問它。這裏是我使用的客戶端代碼:EJB客戶端錯誤

public class DossierBeanTest extends TestCase { 
     protected DossierHome dossierHome; 
     protected Dossier dossier; 

     public DossierBeanTest(String argo){ 
       super(arg0); 
     } 

     protected void setUp() throws Exception { 
       super.setUp(); 
       Hashtable env=new Hashtable(); 


       env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 
       env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); 
       env.put(Context.PROVIDER_URL,"jnp://localhost:1199"); 
       Context context=new InitialContext(env); 

       Object finderRef=context.lookup(dossierHome.JNDI_NAME); 
       dossierHome=(DossierHome)PortableRemoteObject.narrow(finderRef,DossierHome.class); 
       dossier=dossierHome.create(); 

      } 

      public void testGetString() throws RemoteException { 
       assertEquals("Test",dossier.getTest()); 
      } 

但問題是,這個客戶端失敗,出現錯誤:

 javax.naming.CommunicationException: Could not obtain connection to any of these 
     urls: localhost:1199 and discovery failed with error : 
     javax.naming.CommunicationException: Receive timed out [Root Exception is 
     java.net.SocketTimeoutException: Receive timed out][Root exception is 
     javax.naming.CommunicationException: Failed to connect to server localhost:1199 
     .... 


     at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1416) 

....

回答

0

我猜你正在使用錯誤的端口號。您可以通過查看命令netstat -a的輸出來查看。如果沒有進程正在監聽端口1199,則必須檢查JBoss配置。

+0

應該更改哪個配置文件? – Attilah 2009-10-07 17:12:21

+0

查看文件「jboss-service.xml」,然後在。 – tangens 2009-10-07 18:19:08

0

默認端口是1099,你有改變嗎?如果不嘗試從1199切換端口。

此外,如果你在Linux上,你可能想嘗試127.0.0.1而不是本地主機。

+0

我試着切換到127.0.0.1。這是同樣的錯誤。 – Attilah 2009-10-07 17:00:59

+0

此主題可能有幫助 http://forums.sun.com/thread.jspa?forumID=58&tstart=0&threadID=288759&trange=15 – 2009-10-07 17:22:48

1

至於其他已經指出,JBoss的naming server默認監聽端口1099。所以,除非你在conf/jboss-service.xml改變了這個值(服務名稱jboss:service=Naming),你應該寫:

env.put(Context.PROVIDER_URL,"jnp://localhost:1099); 

話雖這麼說,我通常更喜歡在jndi.properties文件(放在類路徑中)中提供JNDI環境設置。在你的情況,有以下內容:

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

,並使用空參數的構造函數InitiatContext()

Context context = new InitialContext(); 

這使得代碼可移植(可能不是在測試方面的問題,好吧,我寧願不要硬編碼這樣的東西)。