我正在通过一本关于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最终被正确调用。
答案 0 :(得分:1)
你的假设是对的。
您在类路径中缺少net.ensode.glassfishbook.SimpleSession。
...通过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