2010-09-05 45 views
3

首先一點背景薄(NER)獨立客戶端企業應用

我工作的企業應用程序(EAR)與EJB模塊&應用程序客戶端模塊。我也使用休眠JPA進行持久化,並使用swingx進行GUI。那些是唯一的第三方atm。此應用程序部署在Glassfish上。

一切都很順利,直到我第一次部署我的應用程序並嘗試通過Java Web Start啓動它。我碰到了主要的路障--JWS不喜歡hibernate3.jar,抱怨它沒有簽名,儘管它是。如果您有興趣,我已經描述了問題here。無論如何,它可能與JVM中的這個unresolved bug有關。還有其他一些我不喜歡的JWS,但現在並不重要。

電流接近

  • 考慮到這個問題,我想我會部署自己的應用程序(我打算寫某種自動更新,以保持一切同步)。所以我遵循here的指示,一切都很酷,除了我需要部署到客戶端的應用程序容器大約是40 MB!。太過分了!

  • 好的,所以我說我將刪除應用程序容器,創建一個獨立的客戶端通過JNDI執行EJB查找並且只包含最小值。

在這裏我卡住了!

這是JNDI查找我用:

Properties prop = new Properties(); 
prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); 
prop.put("org.omg.CORBA.ORBInitialHost", "bogdan-pc"); 
prop.put("org.omg.CORBA.ORBInitialPort", "3700"); 
try { 
    InitialContext ctx = new InitialContext(prop); 

    DatabaseCacheEJBRemote service = (DatabaseCacheEJBRemote) ctx.lookup("ejbs.DatabaseCacheEJBRemote"); 
    System.out.println("count: " + service.getProductionCount()); 

} catch (NamingException ex) { 
    Logger.getLogger(MyFrame.class.getName()).log(Level.SEVERE, null, ex); 
} 

1)我想,如果我包括的appserv-rt.jar中& javaee.jar應該夠了。顯然我需要GF的其他東西......問題是我需要部署到客戶端以獲得EJB的查找工作的最低限度是什麼?

2)爲什麼我需要包含所有的ejb模塊依賴關係(如hibernate庫)?我沒有在我的客戶端東西從休眠狀態的任何地方使用...

感謝您閱讀這篇長文章!

編輯:

關於我的環境中的一些細節:

  • 的Java 1.6.0_21
  • GF 3.0.1
  • 的Windows(XP/2003/7)
+0

GF什麼版本的? – 2010-09-05 20:38:47

+0

我正在使用GF 3.0.1 – Bogdan 2010-09-06 04:27:35

回答

1

考慮使用WebServices將您的桌面應用程序連接到應用程序服務器呃。從Java EE 6中,這很容易,因爲您只需註釋一些會話bean(不太確定細節)即可成爲Web服務。這是一個「瘦」的解決方案,連接可以拋出http(s),因此標準端口80/443不應該在私人或企業網絡中被阻止。

+0

當客戶端不在Jave EE容器內運行時,這絕對是一種更好的方法。另請參閱相關討論:http://stackoverflow.com/questions/3675661/ejb-vs-webservice-performance-point-of-view – 2010-09-17 04:48:34

1

如果你將ejb分成獨立的模塊,即Interface和Implementation jars,你應該能夠擺脫很多依賴關係。
impl和客戶端jar應該依賴於intf,然後客戶端應該不再對hibernate有任何依賴。
我發現maven成爲分裂和管理的依賴,並生成JNLP文件,部署描述符一個非常有用的工具集,JAR文件簽名等

你的Hibernate JAR文件可能有重複的簽名,並且可能需要首先未簽名,然後辭職。

你爲什麼不考慮基於瀏覽器的前端,如gwt或者vaadin或者jboss-seam或者wicket或者grails或者tapestry或者其他許多其他的。那麼你不必擔心在客戶端iether上安裝正確版本的java。

1

這是客戶端罐子GlassFish的3完整的列表:

auto-depends.jar 
deployment-common.jar 
glassfish-corba-internal-api.jar  
internal-api.jar 
management-api.jar 
bean-validator.jar 
dol.jar 
glassfish-corba-newtimer.jar   
javax.ejb.jar 
orb-connector.jar 
common-util.jar 
ejb-container.jar 
glassfish-corba-omgapi.jar  
javax.jms.jar 
orb-iiop.jar 
config-api.jar 
ejb.security.jar 
glassfish-corba-orb.jar 
javax.resource.jar 
security.jar 
config-types.jar 
glassfish-api.jar 
glassfish-corba-orbgeneric.jar  
javax.servlet.jar 
ssl-impl.jar 
config.jar 
glassfish-corba-asm.jar 
glassfish-naming.jar 
javax.transaction.jar 
transaction-internal-api.jar 
connectors-internal-api.jar  
glassfish-corba-codegen.jar  
gmbal.jar 
jta.jar 
container-common.jar 
glassfish-corba-csiv2-idl.jar  
hk2-core.jar 
kernel.jar 
+0

這個列表的來源是什麼?這個**不同於將glassfish本身作爲一個庫包含在內的情況? – Thufir 2014-09-13 07:20:10