没有XML的Spring4 - web.xml - 转换为Java

时间:2016-03-30 04:17:42

标签: java spring spring-mvc spring-boot openjpa

我的web.xml中有几个JNDI资源

这是用于读取外部属性文件,路径取决于环境。

<resource-ref id="resourceRef">
    <res-ref-name>config/file</res-ref-name>
    <res-type>java.lang.String</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

这适用于JNDI JDBC DB定义

    <resource-ref id="MyDatabase">
    <description></description>
    <res-ref-name>jdbc/MyDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>     

和旧的ejb(EJB2.x)

<ejb-ref id="service">
    <description />
    <ejb-ref-name>ejb/AgencyService</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <home>ejb.Home</home>
    <remote>ejb.Service</remote>
</ejb-ref>

如何将这些资源转换为Java(Servlet 3.x)? 现有的应用程序正在从servlet 2.5和EJB 2.x迁移到Servlet3,Rest和EJB3。我的新应用程序使用Spring4(MVC,安全等)和OpenJPA 2.1.x.我们的设计目标不是使用&#34; xml&#34; (没有web.xml,SpringContext.xml等)。

我创建了extends AbstractAnnotationConfigDispatcherServletInitializer

的Java类

这相当于Web.xml。

如何将resource-refejb-ref迁移到Java类?

非常感谢你的帮助!

注意: - 已编辑

2 个答案:

答案 0 :(得分:0)

对我而言,你要求的并不是很清楚。我会解释

基本上Spring和JEE堆栈相互“竞争”。从你所说的:EJB3 + JPA显然属于JEE堆栈,另一方面SpringMVC显然来自Spring universe + spring boot显然属于Spring阵营。

现在,web.xml是常规spring应用程序的一种引导点(当然不包括spring boot)。因此,通常您应该指定一个将加载弹簧的Web侦听器。当你在问题中标记一个弹簧靴时,一切都混乱了。用两个词来说,弹簧靴确实可以用注释配置所有东西,但它仍然“假设”你在引擎盖下使用弹簧。

关于资源, 如果你正在使用DAO层,你应该为那些定义bean,但是底线它们将由spring管理。 但在这种情况下,不需要EJB。当然你仍然可以在春天DAO之外使用JPA(如果你真的需要ORM,人们倾向于今天直接使用Hibernate IMO,而Hibernate最近会实现JPA)如果你愿意,但无论如何它将再次被春天使用。

另一方面,如果你需要一个JEE堆栈,我怀疑Spring boot真的适合你。 JEE堆栈是一种“一体化”捆绑,由各种应用服务器支持,从这个角度来看,弹簧是“自己采取零件并结合”的解决方案。因此对于spring项目,您可以使用tomcat / jetty,它们绝不是完全兼容的JEE服务器。顺便说一下,这正是弹簧靴的作用。

所以我认为,为了这个项目你应该决定你想成为哪个阵营,JEE或Spring。 这两种技术看起来都很吸引人,每种技术都有其优点/缺点,但最重要的是它归结为:

  • Spring更灵活,更具创新性,您可以更快地获得更改
  • Spring引导程序更复杂(尽管如果有经验丰富的开发人员熟悉spring,那应该不是问题)
  • JEE标准化

我知道,我的答案有点模糊,但我猜你已经明白了这一点

希望这有帮助

答案 1 :(得分:0)

使用Spring Boot-那里不需要xml。 Spring Boot嵌入了Tomcat(或可选的Jetty),因此不支持EJB。

我将在需要时使用spring功能将EJB的功能重写为“普通的Java”类。

对于外部配置文件,Spring提供了几种在运行时/部署外部提供配置选项的方式,因此不需要JNDI。