我最近遇到了glassfish standalone(v3.1)vs glassfish embedded(v3.1)vs java SE以及 java.endorsed.dirs的使用方式的问题.我遇到的具体问题是 here,但我认为这不是我最后一次遇到类似问题.

我在here和here找到的信息建议在编译时将glassfish认可的lib添加到bootstrap类路径中.但是,this错误报告表明在使用glassfish嵌入时很难正确设置已认可的库.

因此,似乎当我部署到一个独立的glassfish容器时,我的应用程序将针对glassfish包含的认可库运行,但是当使用嵌入式容器时它不会.我遇到了我原来的问题,因为maven-embedded-glassfish-plugin没有启动使用像glassfish独立的认可库这样嵌入的glassfish.我也不确定其他容器(例如:jboss)是否包含与glassfish相同的一组认可库.

所以,我(1)应该努力(很多)确保我的应用程序是针对认可的lib编译的,并且总是部署到使用被认可的libs引导的容器中,或者我应该(2)只是坚持使用捆绑的东西使用Java SE 6?

如果我选择(2),在将应用程序部署到使用较新的认可库进行自举的容器时,是否需要担心不兼容问题?

我很感激任何人都可以提供的任何见解.

解决方法

我可能会遗漏一些明显的东西,但是……不是GlassFish Embbeded附带了与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>

<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>

<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>

这几乎是您针对Java EE 6 API编译项目所需的全部内容.任何符合Java EE 6的App Server都应该提供这些服务,您不应该担心它们如何使它可供您的应用程序使用.

引导Java EE服务的责任应该是您的App Server.如果你尝试自己的“内部”解决方案,JAR Hell可能会破裂.

干杯,

java-ee – 处理Java EE和java.endorsed.dirs的最佳实践?的更多相关文章

  1. 调试 – 使用带有glassfish服务器的ubuntu上的intelliJ,无法在调试模式下运行Web应用程序

    在使用glassfish3.1.2.2的ubuntu12.04上的intelliJ12.0中,我试图在调试模式下启动我的Web应用程序,但是我收到此错误消息:我尝试用另一个更改domain.xml中的端口9009但它不成功.你能帮我解决这个问题吗?

  2. Ubuntu / Java / Glassfish的奇怪文件名字符编码问题

    简单的System.out.println方法正确显示文件名,并成功将问题文件复制到另一个文件夹.这个事实让我别无选择,只能宣称Glassfish是我的班级,java和linux之间的差距.在Glassfish中是否有任何字符编码特定设置我可以纠正以修复此错误或者我可能错过了某些问题并且问题实际上并不存在?.另外,请参阅Glassfish配置,例如在sun-web.xml中你必须看到这样的东西:

  3. ubuntu – Glassfish 4服务器意外停止

    我是GlassFish的新手,也是一般的应用服务器.我有一个运行Ubuntu的AmazonEC2实例,并安装了GlassFish4.它启动时没有问题,但一段时间后,GlassFish服务器就会自行关闭.我查看了server.log,但一切看起来都很正常,并且没有条目描述任何失败或关闭.关于可能是什么原因的任何输入,或者我应该寻找任何线索的地方?服务器过去常常每天崩溃,但是交换它并没有在几周内崩溃.

  4. java-ee – Glassfish中的JNDI配置/查找

    我在Glassfish中遇到一些基本的JNDI配置时遇到了麻烦.我认为应该是一个简单的任务:在运行时,确定特定属性是否设置为true.我认为这是JNDI的一个很好的应用程序,但似乎无法在app服务器和我的servlet代码之间获得正确的路径.以下是我在Glassfish中配置属性的方法:在我的servlet代码中,我试图通过以下方式查找值:除了这条路之外,我还尝试了以下方法但没有成功:>java:

  5. java – 在GlassFish 4.1中升级Jackson

    我使用的是GlassFish4.1,其中包括Jackson2.3.2.我想升级到最新版本的Jackson(目前为2.4.4).在GlassFish4.1中升级Jackson的过程是否简单如下:a)停止GlassFishb)删除osgi-cachec)用更新的版本替换glassfish/modules目录中的Jackson2.3.2jard)启动GlassFish谢谢.解决方法请@seehttps:

  6. java – 如何使JNDI名称与GlassFish和WildFly兼容

    我假设答案可能取决于特定于应用程序的部署描述符,但我找不到任何涵盖这两种情况的示例.有人能指出我正确的方向吗?

  7. glassfish – Java EE7的拦截器问题

    我正在测试/切换到JavaEE7(Glassfish4),我遇到的一个问题是拦截器,每当我尝试运行项目时,我都会收到以下错误.SEVERE:Exceptionwhileloadingtheapp:CDIdeploymentfailure:WELD-001417Enabledinterceptorclasscom.xxxxxx.security.SecuredInterceptorinfile:/h

  8. java-ee – 处理Java EE和java.endorsed.dirs的最佳实践?

    如果我选择,在将应用程序部署到使用较新的认可库进行自举的容器时,是否需要担心不兼容问题?不是GlassFishEmbbeded附带了与JavaEE规范兼容的库吗?并不是默认加载的那些库?这几乎是您针对JavaEE6API编译项目所需的全部内容.任何符合JavaEE6的AppServer都应该提供这些服务,您不应该担心它们如何使它可供您的应用程序使用.引导JavaEE服务的责任应该是您的AppServer.如果你尝试自己的“内部”解决方案,JARHell可能会破裂.干杯,

  9. 过滤器链的GlassFish问题:java.lang.IllegalStateException:已为此响应调用了PWC3990:getWriter()

    我们需要升级老式Web应用程序以在GlassFish3而不是Tomcat下运行才能获得EAR部署(Glassfish被选中,因为它是参考JEE6实现)不幸的是,它很快证明了确保用户登录的机制不能正常工作并且抱怨已经调用了getWriter()(这很可能是正确的)并且我无法弄清楚原因.方法是我们在完整的JSP文件集上有一个过滤器,用于检查用户是否已登录,如果没有,则使用filterChain.doF

  10. 调试 – 使用Glassfish 3.0.1和NetBeans 6.9.1的JPA 2.0(记录和跟踪)

    我在Glassfishv3.0.1和NetBeans6.9.1中使用JPA2.0,并且无法从JPA2.0中查看查询和其他日志记录信息.本质上我希望能够看到由JPA生成的所有sql语句和其他相关调试信息…有没有人能成功地配置日志记录来提供这样的反馈?我已经尝试过几件事情无济于事任何帮助将不胜感激.非常感谢.解决方法最终对我做的诀窍在于:结合您推荐的标签:这让我看到NetBeans输出窗口中的相关JPA日志.这也在Eclipse中工作.输出被发送到控制台窗口,与服务器的输出混合,这正是我想要的.

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部