我遇到了从OC4J 10.1.2.3迁移到10.1.3.1.4的麻烦。问题出在具有多个EJB的应用程序中(所有EJB都是2.1,没有EJB 3.0)。 Jdeveloper将采用默认的ejb-jar.xml(Jdeveloper在其独立的OC4J实例上运行它所需的那个)并将其打包到每个EJB JAR模块中。这导致app服务器在部署时钻入每个EJB JAR模块,并且找到相同的ejb-jar.xml文件N次(其中N = EJB模块的数量)。这会导致重复的EJB引用,并将破坏任何JNDI查找,例如:“java:comp / env / ejb / EJBName”。因此,部署具有3个EJB,EJB1,EJB2和EJB3的应用程序会导致应用服务器注册9个EJB而不是3个。我需要一种最佳实践方式,但在10.1.3.4和JDeveloper之间的方式处理这种情况是相当可怕的......

附注:如果Web应用程序的JNDI查找代码被折射为“ejb / EJBName”,它们将起作用。但这是不可取的。

有帮助吗?

解决方案 2

问题是我们的部署配置文件中的多个引用。我们为EACH EJB创建了一个部署配置文件。这意味着每个EJB都有自己的ejb-jar.xml(该文件包含项目中所有EJBS的描述)。因此,每次JDeveloper创建EJB时,它都会在其生成的每个EJB中放置所有EJBS的描述符,从而导致NxN数量的引用。因此Nx(N-1)额外参考。

现在,关键点是Oracle Application Server 10.1.2.3.0和bellow并不关心这些重复引用。但是正如我们所看到的,10.1.3.1.4是一个非常不同的版本,而且确实破了。

我们的修复:只有1个EJB部署配置文件,其中包含所有EJB类和它们使用的POJO。请记住,在每个EJB有1个EJB配置文件之前......所有这一切都允许Jdeveloper(这是垃圾恕我直言)正确生成有效的EAR。结合Jdeveloper和Oracle的Application Server的废话就是造成这种情况的原因。

其他提示

您应该查看Oracle文档以了解您的情况。 甲骨文® J2EE Enterprise JavaBeans开发人员指南的容器是一个良好的开端 根据Oracle® J2EE服务指南的容器,第2章:使用JNDI 当您使用表单“ejb / EJBName”时你表演“本地”抬头。如果要使用完整表单,则必须选中“启用全局JNDI查找”。 “使用JNDI”部分章。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top