Rya*_*n J 7 glassfish java-ee glassfish-embedded
我最近遇到了glassfish standalone(v3.1)vs glassfish embedded(v3.1)vs java SE以及java.endorsed.dirs的使用方式的问题.我遇到的具体问题在这里,但我认为这不是我最后一次遇到类似问题.
我在这里和这里找到的信息建议在编译时将glassfish认可的lib添加到bootstrap类路径.但是,这个错误报告表明,当使用嵌入的glassfish时很难正确设置认可的库.
因此,似乎当我部署到独立的glassfish容器时,我的应用程序将针对glassfish包含的认可库运行,但是当使用嵌入式容器时,它不会.我遇到了我原来的问题,因为maven-embedded-glassfish-plugin没有启动使用像glassfish独立的认可库这样嵌入的glassfish.我也不确定其他容器(例如:jboss)是否包含与glassfish相同的一组认可库.
所以,我(1)应该努力(很多)确保我的应用程序是针对认可的lib编译的,并且总是部署到使用已认可的libs引导的容器中,或者我应该坚持使用捆绑的内容使用Java SE 6?
如果我选择(2),在将应用程序部署到使用较新的背书库进行自举的容器时,是否需要担心不兼容问题?
我很感激任何人都能提供的见解.
我可能在这里遗漏了一些明显的东西,但是...GlassFish Embeded 不是附带与 Java EE 规范兼容的库吗?这些库不是默认加载的吗?(如果不是,请在此处填写错误: http: //java.net/jira/browse/EMBEDDED_GLASSFISH)。
我的意思是:您应该针对 Java EE 规范 API 进行编译,并让容器使用它自己的实现。
对于第一部分,如果您使用 Maven,我喜欢Codehaus archetypes设置认可库的方式。它既干净又与应用程序服务器无关:
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Run Code Online (Sandbox Code Playgroud)
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${endorsed.dir}</outputDirectory>
<silent>true</silent>
<artifactItems>
<artifactItem>
<groupId>javax</groupId>
<artifactId>javaee-endorsed-api</artifactId>
<version>6.0</version>
<type>jar</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这几乎是您根据 Java EE 6 API 编译项目所需的全部内容。任何符合 Java EE 6 的应用程序服务器都应该提供这些服务,并且您不应该担心它们如何将其提供给您的应用程序。
引导 Java EE 服务的责任应该由您的应用服务器负责。如果您尝试自己的“内部”解决方案,JAR Hell 很可能会崩溃。
干杯,
| 归档时间: |
|
| 查看次数: |
4491 次 |
| 最近记录: |