【问题标题】:Thin(ner) standalone client for Enterprise Application用于企业应用程序的瘦(ner)独立客户端
【发布时间】:2011-04-08 11:02:28
【问题描述】:

先介绍一点背景

我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一的第三方自动取款机。此应用程序部署在 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 依赖项(如休眠库)?我没有在我的客户端中的任何地方使用来自休眠的东西......

感谢您阅读这篇长文!

编辑:

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

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

【问题讨论】:

    标签: java deployment jakarta-ee glassfish ejb


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    您的hibernate jar 文件可能有重复的签名,可能需要先未签名然后再签名。

    您为什么不考虑使用基于浏览器的前端,例如 gwt 或 vaadin 或 jboss-seam 或 wicket 或 grails 或 Tapestry 或许多其他前端之一。这样您就不必担心在客户端上安装正确的 java 版本了。

    【讨论】:

      【解决方案3】:

      这是 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
      

      【讨论】:

      • 这个列表的来源是什么?这与将 glassfish 本身作为一个库不同有何不同?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多