【问题标题】:build ear for remote deployment with Application Client Container (ACC) on Glassfish使用 Glassfish 上的应用程序客户端容器 (ACC) 为远程部署构建 ear
【发布时间】:2014-11-14 11:09:40
【问题描述】:

对于 ACC,一个 JAR 是否依赖于另一个 JAR?文档对此并不十分清楚,至少so far as I've read

我的理解是我需要从existing code 构建一个可以远程部署的 EAR。此 EAR 应包含现有客户端。所有代码:1.) 客户端,2.) EJB 模块和 3.) 远程接口在 localhost 上运行。我已将 EJB 部署到远程 Glassfish 服务器。

如何从Creating and Running an Application Client on the GlassFish Server 创建一个“ant-java-ee project”?我创建包的示例非常奇怪。 Netbeans 似乎没有“ant jar”选项,它以我熟悉的方式构建它。没有像 Netbeans 应用程序那样典型的 ant jar 目标; ant dist 结果:

dist:

BUILD SUCCESSFUL
Total time: 6 seconds
thufir@dur:~/NetBeansProjects/HelloClient$ ll
total 32
drwxrwxr-x  7 thufir thufir 4096 Sep 19 11:51 ./
drwxrwxr-x 16 thufir thufir 4096 Sep 16 09:22 ../
drwxrwxr-x  5 thufir thufir 4096 Sep 19 11:51 build/
-rw-rw-r--  1 thufir thufir 3654 Sep 13 20:40 build.xml
drwxrwxr-x  2 thufir thufir 4096 Sep 19 11:51 dist/
drwxrwxr-x  3 thufir thufir 4096 Sep 13 20:38 nbproject/
drwxrwxr-x  4 thufir thufir 4096 Sep 13 20:38 src/
drwxrwxr-x  2 thufir thufir 4096 Sep 13 20:38 test/
thufir@dur:~/NetBeansProjects/HelloClient$ ll dist/
total 12
drwxrwxr-x 2 thufir thufir 4096 Sep 19 11:51 ./
drwxrwxr-x 7 thufir thufir 4096 Sep 19 11:51 ../
-rw-rw-r-- 1 thufir thufir 1848 Sep 19 11:51 HelloClient.jar
thufir@dur:~/NetBeansProjects/HelloClient$ 
thufir@dur:~/NetBeansProjects/HelloClient$ 
thufir@dur:~/NetBeansProjects/HelloClient$ java -jar dist/HelloClient.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: hello/HelloBeanRemote
    at helloclient.Main.main(Main.java:11)
Caused by: java.lang.ClassNotFoundException: hello.HelloBeanRemote
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more
thufir@dur:~/NetBeansProjects/HelloClient$ 

另一方面,ant run 给出了很好的结果:

-run:
     [java] hello world

run:

BUILD SUCCESSFUL
Total time: 28 seconds
thufir@dur:~/NetBeansProjects/HelloClient$ ll dist/
total 32
drwxrwxr-x 3 thufir thufir  4096 Sep 19 11:56 ./
drwxrwxr-x 7 thufir thufir  4096 Sep 19 11:56 ../
drwxrwxr-x 2 thufir thufir  4096 Sep 19 11:56 HelloClientClient/
-rw-rw-r-- 1 thufir thufir 13106 Sep 19 11:56 HelloClientClient.jar
-rw-rw-r-- 1 thufir thufir  1848 Sep 19 11:56 HelloClient.jar
thufir@dur:~/NetBeansProjects/HelloClient$ 

这些 jar 没有按我的预期打包:

thufir@dur:~/NetBeansProjects/HelloClient$ 
thufir@dur:~/NetBeansProjects/HelloClient$ jar -tf dist/HelloClient.jar 
META-INF/
META-INF/MANIFEST.MF
helloclient/
META-INF/application-client.xml
helloclient/Main.class
thufir@dur:~/NetBeansProjects/HelloClient$ 
thufir@dur:~/NetBeansProjects/HelloClient$ jar -tf dist/HelloClientClient.jar 
META-INF/MANIFEST.MF
META-INF/application-client.xml
META-INF/glassfish-application-client.xml
META-INF/sun-application-client.xml
org/glassfish/appclient/client/AppClientFacade.class
META-INF/javaee.client.policy
META-INF/restrict.client.policy
thufir@dur:~/NetBeansProjects/HelloClient$ 
thufir@dur:~/NetBeansProjects/HelloClient$ jar -tf dist/HelloClientClient/HelloClient
HelloClientClient.jar  HelloClient.jar        
thufir@dur:~/NetBeansProjects/HelloClient$ jar -tf dist/HelloClientClient/HelloClient.jar 
META-INF/MANIFEST.MF
META-INF/application-client.xml
helloclient/Main.class
thufir@dur:~/NetBeansProjects/HelloClient$ 
thufir@dur:~/NetBeansProjects/HelloClient$ jar -tf dist/HelloClientClient/HelloClientClient.jar 
META-INF/MANIFEST.MF
META-INF/application-client.xml
META-INF/glassfish-application-client.xml
META-INF/sun-application-client.xml
org/glassfish/appclient/client/AppClientFacade.class
META-INF/javaee.client.policy
META-INF/restrict.client.policy
thufir@dur:~/NetBeansProjects/HelloClient$ 

我不清楚这些 JAR 之间的关系。通常,Netbeans 将为 API 构建一个“lib”文件夹。在这种情况下,ACC 有一些魔力。目标是将此应用程序打包为 EAR,以便将其部署到远程 Glassfish 服务器。

【问题讨论】:

    标签: java netbeans jar glassfish ear


    【解决方案1】:

    选择 File > New Project 并在 Java EE 类别中选择 Enterprise Application Client

    您需要远程接口,而不是客户端中的 ejb 代码

    client 使用 rmi (socket) 与服务器通信并在服务器端运行 ejb

    客户端容器被视为供应商的继子,大多数 soa 架构在两侧都有完整的 java ee 服务器,即 java ee web 应用程序是 java ee ejb/webservice 应用程序的客户端

    我讨厌所有那些 netbeans 文件,我宁愿使用 maven,有时可能会更难,但你会在网络上获得更好的支持

    对于远程调用,我会使用 jax-rs 或 jax-ws

    【讨论】:

    • 澄清一下,客户端中没有 ejb 代码 -- 就像 netbeans 示例一样。
    • 如果你真的想要客户端项目,它必须是客户端项目,而不是 java ee ejb 类型的项目
    • 这意味着 ACC 和 netbeans 教程都没有意义……那么 ACC 的目的是什么?
    • 让一个独立的 java se 客户端执行远程 ejb
    • 好的,我不明白你的意思,真诚的。我试图让 java se 客户端执行远程 EJB ——这就是问题的上下文。也许这个问题有缺陷。 如何为远程连接配置客户端?
    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多