命令行工具Glassfish appclient没有看到已部署的EJB

时间:2017-07-05 13:24:00

标签: glassfish java-ee-7

我正在通过一本关于Glassfish"的Java EE 7的书籍,在Fedora Linux上安装服务器。

我在服务器上部署了一个简单的无状态会话bean SimpleSessionBean,我试图通过SessionBeanClient和Glassfish命令行工具 appclient 来处理SimpleSessionBean,运行客户端jar。书中的一切,所以它应该工作。然而,客户端无法找到SimpleSessionBean。显然是类路径问题。在服务器日志中没有任何事情发生。

我无法找到如何正确安装Glassfish的指示。一切都在服务器内。我可以从浏览器中运行的facelets处理已安装的war文件。

这可能是设置$ PATH正确或某事或其他环境变量的问题。有关文献的任何指示?

提前感谢任何建议!

UPDATE1 :错误消息

在我运行appclient的bash终端窗口中:

[fedora @ localhost bin] $ ./appclient -client /home/fedora/Downloads/6886EN_04_Code/ch04_src/simplesessionbeanclient/target/simplesessionbeanclient.jar

Jul 06,2017 12:52:57 PM org.glassfish.apf.impl.DefaultErrorHandler error 严重:类[Lnet / ensode / glassfishbook / SimpleSession; ] 未找到。

加载[class net.ensode.glassfishbook.SessionBeanClient]时出错 线程" main"中的例外情况java.lang.NoClassDefFoundError:net / ensode / glassfishbook / SimpleSession     at net.ensode.glassfishbook.SessionBeanClient.invokeSessionBeanMethods(SessionBeanClient.java:12)     在net.ensode.glassfishbook.SessionBeanClient.main(SessionBeanClient.java:19) 引起:java.lang.ClassNotFoundException:net.ensode.glassfishbook.SimpleSession     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)     在org.glassfish.appclient.client.acc.ACCClassLoader.findClass(ACCClassLoader.java:237)     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)     在java.lang.ClassLoader.loadClass(ClassLoader.java:357)

UPDATE2 :来自Glassfish的书:

我们正在使用Maven来构建我们的代码。对于这个例子,我们使用了 Maven Assembly插件(http://maven.apache.org/plugins/maven-assembly-plugin/)用于构建客户端JAR文件 包括所有依赖项;这使我们不必指定 -classpath命令行选项中的所有相关JAR文件 appclient实用程序。要构建此JAR文件,只需调用mvn即可 程序集:从命令行进行汇编。

解决方案:缺少的链接正在生成一个客户端jar,其中包含额外的jar" on"可以这么说。请按以下步骤操作(至少在Eclipse中):select pom.xml>右键单击>运行方式> Maven build ...>在目标字段中输入:assembly:assembly>应用/运行。

结果是您将在目标文件夹下找到两个jar:xxxclient.jar和xxxclient-jar-with-dependencies.jar。 从bash中的命令行执行后面的jar文件夹:

  

/ path_to / appclient -client xxxclient-jar-with-dependencies.jar

经过漫长的等待(在我的200美元迷你Linux盒子上),HelloWorld-ish服务器EJB最终被正确调用。

1 个答案:

答案 0 :(得分:1)

你的假设是对的。

您在类路径中缺少net.ensode.glassfishbook.SimpleSession。

来自older book online

  

...通过appclient实用程序执行。该实用程序可在以下位置找到   [glassfish安装目录] / glassfish / bin /。 假设此路径   位于PATH环境变量中,假设我们放置了客户端   我们会在一个名为simplesessionbeanclient.jar的JAR文件中编写代码   通过在中键入以下命令来执行上述客户端代码   命令行:

     

appclient -client simplesessionbeanclient.jar

好像你是从

开始的
  

... / bin /./ appclient -client   /home/fedora/Downloads/6886EN_04_Code/ch04_src/simplesessionbeanclient/target/simplesessionbeanclient.jar

您需要在CLASSPATH中(或在该类路径中的jar中)使用SimpleSession.class。 通常java首先检查当前目录(这是你的bin文件夹)。如果找不到该类(因为它不在你的simplesessionbeanclient文件夹中),它会在类路径中搜索该类(你没有添加simplesessionbeanclient文件夹)。

尝试

appclient -client simplesessionbeanclient.jar

来自simplesessionbeanclient.jar所在的文件夹。 如果您不想将appclient文件夹添加到以

开头的路径中
/your/path/to/appclient -client simplesessionbeanclient.jar

(再次来自simplesessionbeanclient.jar所在的文件夹)

更新: 如果你仍然得到一个ClassNotFoundException,看看你的jar文件中是否缺少它(jar是Zip-File,你可以使用你的Zip-Tools):

jar tf simplesessionbeanclient.jar

如果有SimpleSession.class