【发布时间】:2015-10-15 15:25:37
【问题描述】:
我们有一个基于 Spring 的应用程序,它由多个 Java EE 5 Web 模块组成,并且在 WebSphere Application Server 8.5 中运行良好。我们使用来自javax.inject 的标准注解,例如@Inject。 Spring 根据 Spring xml 文件中的 bean 定义解决了这个问题。
现在,如果我们将应用程序升级到 Java EE 6,应用程序服务器的 CDI 将尝试解析 @Inject 并且肯定会失败,因为我们所有的 bean 都是在 Spring 上下文中定义的,而不是在 CDI 上下文中定义的(我们没有 @ 987654324@).
是否可以强制 Spring 继续处理 Java EE 6 容器(WebShpere 8.5)中的@Inject? IE。禁用 CDI?还是升级到 Java EE 6 会迫使我们使用 CDI?
【问题讨论】:
-
是您的假设还是它的工作原理?您确定您的模块中缺少 beans.xml 吗?
-
问题出现是因为我目前正在将我的 JEE5 应用程序升级到 JEE6,并且在运行一些测试时,WebSphere 8.5.5.7 无法解析 Inject 注释,并且在日志中我发现了这个错误:“CWOWB0102E:发生 JCDI 错误:JCDI 运行时无法解析 @Inject java.lang.reflect.Method.setSessionValidator(SecureSessionValidator),因为 IBMBeanManager 为空。因此,似乎 WebSPhere 的 CDI 运行时启动了,尽管我的 Web 模块中没有 beans.xml。我想那是一个错误,因为只有在 beans.xml 存在时才应该激活 CDI。
标签: spring websphere cdi java-ee-6