2010-02-01 59 views
2

我想從GWT devmode內部執行JNDI查找。從GWT開發模式到glassfish v3的EJB JNDI查找

我有一個本地的glassfishv3運行我想查找的EJB。如果我將GWT-Webapp部署到所說的glassfish中,一切都按預期工作。但是,如果我嘗試查找EJB組件從DEVMODE中我得到這個異常:

javax.naming.NamingException: Lookup failed for 'myBean' in SerialContext [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]] ... Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException] 
     at com.sun.enterprise.naming.impl.SerialContext.getProvider (SerialContext.java:276) 
     at com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:430) 
     ... 22 more Caused by: java.lang.NullPointerException 
     at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider (SerialContext.java:297) 
     at com.sun.enterprise.naming.impl.SerialContext.getProvider (SerialContext.java:271) 
     ... 23 more 

看來,嵌入式碼頭找不到類路徑中的類「SerialContextProvider」。

我嘗試將gf-client.jar和glassfish-naming.jar添加到類路徑中(除了在eclipse中將glassfish v3添加到目標運行時),但無濟於事。

我甚至放在一個包含簡單的EJB項目以及執行查找的GWT項目的小樣本(在這裏找到:http://satansoft.de/jnditest/jnditest.tgz)。 該歸檔文件還包含一個小的CLI客戶端,它在類路徑中使用gf-client.jar運行時工作得非常好。

我也在官方的gwt郵件列表上問過這個問題,但沒有人能夠幫助我。

因此:是否有人能夠從GWT devmode執行JNDI查找到glassfish v3?

+1

此文檔可能有用:http://docs.sun.com/app/docs/doc/820-7695/beanv?l = en&a = view。 似乎Jetty服務器必須發生一些公平的配置才能訪問遠程GF上的bean。最可能的問題是您跳過了一個,或者配置了GWT應用程序,而不是服務器。 – vkraemer 2010-02-04 16:22:22

回答

1

將Glassfish模塊目錄中的所有jar添加到Eclipse GWT項目的war/WEB-INF/lib目錄中。

1

我沒有檢查,但我不確定Jetty是否會拿起gf-client.jar清單中引用的所有罐子(請參閱GlassFish EJB FAQthis previous answer瞭解更多詳情)。所以,雖然我確信在使用獨立客戶端時(因爲我測試了這個),此JAR運行良好,但我沒有嘗試使用嵌入式Jetty。

所以,請儘量手動添加以下JAR:glassfish-naming.jarinternal-api.jarjavax.ejb.jarhk2-core.jarauto-depends.jarglassfish-api.jar

+0

不是,這也沒有工作 - 我得到了同樣的錯誤。我甚至嘗試在glassfish/modules文件夾中添加所有JAR - 查找仍然失敗 – nsn 2010-02-02 13:38:51

0

我不明白你的設置。您可以在Glassfish中運行,也可以在嵌入式Jetty中運行。如果您在Jetty中運行,它將無法工作,因爲您運行在錯誤的服務器中。

我也使用會話bean和其他J2EE技術​​與GWT結合使用,效果很好。

您唯一需要做的就是不運行Jetty服務器。我使用-noserver啓動開發模式並在Glassfish上運行。如果你設置正確,你可以使用DevMode,服務器代碼在glassfish中運行良好。由於您需要確保glassfish服務器是最新的,因此部署更加困難。

+0

SessionBeans本身運行在Glassfish上,而且在使用Eclipse開發時,我使用GWT-Eclipse插件。所以GWT應用程序本身就在嵌入式碼頭中運行。你建議在glassfish上運行應用程序本身,並在沒有它的服務器的情況下使用devmode ...但是,我每次更改源代碼時都不需要重新部署webapp? – nsn 2010-02-02 14:05:46

+0

好的,我可以使用-noserver來設置devmode。 Webapp現在運行在glassfish服務器上,我仍然可以在devmode中進行調試。但是,我現在必須在對源代碼進行更改時重新部署應用程序,這幾乎無法忍受,因爲它會延長開發週期。 有趣的是:使用這種方法使得JNDI查找過時,因爲我可以使用依賴注入來獲取EJB ...;) – nsn 2010-02-02 15:03:08

+1

是的,你是對的,你需要重新部署。但是,如果它使用熱部署,你不會注意到太多。對於UI更改,您不需要重新部署。您只需構建一次,以便引導程序js文件可用。 – 2010-02-03 14:38:39