我的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
这相当于Web.xml。
如何将resource-ref
和ejb-ref
迁移到Java类?
非常感谢你的帮助!
注意: - 已编辑
答案 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。 这两种技术看起来都很吸引人,每种技术都有其优点/缺点,但最重要的是它归结为:
我知道,我的答案有点模糊,但我猜你已经明白了这一点
希望这有帮助
答案 1 :(得分:0)
使用Spring Boot-那里不需要xml。 Spring Boot嵌入了Tomcat(或可选的Jetty),因此不支持EJB。
我将在需要时使用spring功能将EJB的功能重写为“普通的Java”类。
对于外部配置文件,Spring提供了几种在运行时/部署外部提供配置选项的方式,因此不需要JNDI。