适用于企业应用程序的瘦(ner)独立客户端
首先是一点背景 :
我正在使用EJB模块和Application Client模块处理企业应用程序(ear)。 我还使用hibernate JPA进行持久化,使用swingx进行GUI。 这是唯一的第三方atm。 此应用程序部署在Glassfish上。
一切进展顺利,直到我第一次部署我的应用程序并尝试通过Java Web Start启动它。 我遇到了主要的拦路保护程序–JWS不喜欢hibernate3.jar,抱怨它没有签名,尽管它已经签署了。 如果你有兴趣,我在这里描述了这个问题。 无论如何,它可能与JVM中这个未解决的错误有关。 关于JWS还有其他一些我不喜欢的事情,但现在并不重要。
目前的方法
-
鉴于这个问题我想我自己部署了应用程序(我计划编写某种自动更新程序以保持所有内容同步)。 所以我按照这里的说明一切都很酷,除了我需要部署到客户端的应用程序容器大约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-module依赖项(如hibernate库)? 我没有在hibernate的客户端中使用任何地方…
感谢阅读这篇长篇文章!
编辑:
关于我的环境的一些细节:
- Java 1.6.0_21
- GF 3.0.1
- 的Windows(XP / 2003/7)
考虑使用WebServices将桌面应用程序连接到应用程序服务器。 从Java EE 6开始,这更容易,因为您只需注释一些会话bean(不太确定细节)就可以成为Web服务。 这是一个“瘦”的解决方案,可以通过http(s)完成连接,因此不应在私有或公司网络中阻止标准端口80/443。
如果将ejb拆分为单独的模块(即接口和实现jar),则应该能够摆脱许多依赖关系。
impl和客户端jar应该依赖于intf,然后客户端应该不再依赖于hibernate。
我发现maven是一个非常有用的工具集,用于拆分和管理依赖项,生成jnlp文件,部署描述符,签名jar文件等。
你的hibernate jar文件可能有重复的签名,可能需要先签名然后重新签名。
为什么不考虑基于浏览器的前端,如gwt或vaadin或jboss-seam或wicket或grails或tapestry或其他众多的前端。 然后你就不必担心在客户端上安装正确版本的java了。
这是glassfish 3的客户端jar子的完整列表:
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