首先介绍一下背景:
我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一的第三方 atm。此应用程序部署在 Glassfish 上。
一切都很顺利,直到我第一次部署我的应用程序并尝试通过 Java Web Start 启动它。我遇到了主要的障碍——JWS 不喜欢 hibernate3.jar,提示它没有签名,尽管它是。我已经描述了问题 here如果你有兴趣。无论如何,它可能与此有关 unresolved bug在 JVM 中。 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 库)?我没有在我的客户端的任何地方使用来自 hibernate 的东西......
感谢阅读这篇长文!
编辑:
关于我的环境的一些细节:
- Java 1.6.0_21
- GF 3.0.1
- Windows(XP/2003/7)
最佳答案
考虑使用 Web 服务将您的桌面应用程序连接到应用程序服务器。从 Java EE 6 开始,这要容易得多,因为您只需注释一些 session bean(不太确定细节)就可以成为 Web 服务。这是一个“瘦”解决方案,可以通过 http(s) 完成连接,因此标准端口 80/443 不应在私有(private)或公司网络中被阻止。
关于java - 企业应用程序的瘦(更)独立客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646302/