我正在 glassfish v3 上开发 j2ee 应用程序,它将远程调用部署在 jboss 5 应用程序服务器上的 EJB。为此,我的应用程序必须在类路径中有 jboss 客户端 jar。我设法通过将客户端 jar 文件与我的应用程序打包来做到这一点,但这会增加大约 10mb 的大小,因此上传应用程序成为一个问题。
我怎样才能把这些罐子放在别处,以便 gf 把它们捡起来,这样我就不需要把它们放在我的应用程序中了?
我正在 glassfish v3 上开发 j2ee 应用程序,它将远程调用部署在 jboss 5 应用程序服务器上的 EJB。为此,我的应用程序必须在类路径中有 jboss 客户端 jar。我设法通过将客户端 jar 文件与我的应用程序打包来做到这一点,但这会增加大约 10mb 的大小,因此上传应用程序成为一个问题。
我怎样才能把这些罐子放在别处,以便 gf 把它们捡起来,这样我就不需要把它们放在我的应用程序中了?
如有必要,您可以将它们放在服务器的类路径中。转到域的 lib 目录。
在 Glassfish 域的 domain.xml 中,您可以使用 java-config 标记的 classpath-suffix 属性来指向应该是该特定域的 Glassfish 类路径的一部分的位置。
对于 jar 来说,这是可以的,但对于属性文件,这是另一回事。除非您将它们放在 WAR 中,否则它往往会更难(这意味着您无法在没有完全重新部署的情况下更新它们)。
我试图将 xxx.properties 放在配置文件夹中并调整以下 domain.xml 行
<java-config debug-options="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9009" system-classpath="${com.sun.aas.instanceRoot}/MY_VALUE" classpath-suffix="">
...
</java-config>
MY_VALUE 采用以下值:
对 classpath-suffix 进行同样的尝试也无济于事。
使用以下行请求 web-app 显示类路径:
String path = System.getProperty("java.class.path");
LOG.info("Classpath is : '" + path + "'.");
确实表明这些值已被拾取......但永远无法从 ClassLoader.getResourceAsInputStream() 访问属性文件
选项 1:您可以在 GF3 部署期间使用库选项处理此问题。这就是 GF3 部署屏幕所说的。
以逗号分隔的库 JAR 文件列表。通过它们的相对或绝对路径指定库 JAR 文件。指定相对于 instance-root/lib/applibs 的相对路径。这些库按指定的顺序提供给应用程序。
如果您使用命令行进行部署,请使用 --libraries 选项和 asadmin 命令。
这可能不是最好的选择,因为每次取消部署时您都需要处理它。但是,在重新部署的情况下,应保留此设置。
选项 2:将它们放在 Glassfish 域名/lib 目录中。重新启动后,它将被自动拾取并可供您在同一域中的所有应用程序使用。