Java 使用Glassfish上的应用程序客户端容器(ACC)构建用于远程部署的ear

Java 使用Glassfish上的应用程序客户端容器(ACC)构建用于远程部署的ear,java,netbeans,jar,glassfish,ear,Java,Netbeans,Jar,Glassfish,Ear,ACC是一个罐子依赖另一个罐子吗?至少在这方面,文档不是非常清楚 我的理解是,我需要构建一个EAR,从中可以远程部署。此EAR应包含现有客户端。所有代码:1。客户,2。EJB模块和3。远程接口在本地主机上运行。我已将EJB部署到远程Glassfish服务器 如何从中创建一个?我创建的示例包非常奇怪。Netbeans似乎没有一个ant jar选项,它以我熟悉的方式构建它。没有Netbeans应用程序典型的ant jar目标;蚂蚁分布导致: dist: BUILD SUCCESSFUL Total

ACC是一个罐子依赖另一个罐子吗?至少在这方面,文档不是非常清楚

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

如何从中创建一个?我创建的示例包非常奇怪。Netbeans似乎没有一个ant jar选项,它以我熟悉的方式构建它。没有Netbeans应用程序典型的ant jar目标;蚂蚁分布导致:

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$ 
这些罐子的包装不是我所期望的:

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$ 

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

选择文件>新建项目,然后选择Java EE类别中的企业应用程序客户端

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

客户端使用rmi套接字与服务器通信,并在服务器端运行ejb

客户机容器被视为供应商的继子女,大多数soa架构两侧都有完整的JavaEE服务器,即JavaEEWeb应用程序是JavaEEEJB/webservice应用程序的客户机

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


对于远程调用,我将使用jax rs或jax ws来澄清,客户端中没有ejb代码-就像netbeans示例一样。如果您真的想要客户端项目,它必须是客户端项目,而不是java ee ejb类型的项目,这意味着ACC和netbeans教程都没有意义。。。那么ACC的目的是什么呢?为了让一个独立的JavaSE客户端执行远程ejbok,我真的不明白你的意思。我试图让一个独立的JavaSE客户端执行一个远程EJB——这就是问题的背景。也许这个问题有缺陷。如何为远程连接配置客户端?