适用于企业应用程序的瘦(ner)独立客户端

时间:2010-09-05 14:02:38

标签: java deployment java-ee glassfish ejb

首先是一个小背景

我正在使用EJB模块和一个企业应用程序(ear)。应用程序客户端模块。我还使用hibernate 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-module依赖项(如hibernate库)?我没有在hibernate的客户端中随处使用...

感谢您阅读这篇长篇文章!

修改

有关我的环境的一些细节:

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

3 个答案:

答案 0 :(得分:1)

考虑使用WebServices将桌面应用程序连接到应用程序服务器。从Java EE 6开始,这更容易,因为您只需注释一些会话bean(不太确定细节)就可以成为Web服务。这是一个“瘦”的解决方案,可以通过http(s)完成连接,因此不应在私有或公司网络中阻止标准端口80/443。

答案 1 :(得分:1)

如果将ejb拆分为单独的模块,即接口和实现罐,您应该能够摆脱许多依赖关系。
impl和客户端jar应该依赖于intf,然后客户端应该不再依赖于hibernate 我发现maven是一个非常有用的工具集,用于拆分和管理依赖项,生成jnlp文件,部署描述符,签名jar文件等。

你的hibernate jar文件可能有重复的签名,可能需要先签名然后重新签名。

为什么不考虑使用基于浏览器的前端,如gwt或vaadin或jboss-seam或wicket或grails或tapestry或其他许多其他方面。然后你就不必担心在客户端上安装正确版本的java了。

答案 2 :(得分: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