OC4J 10.1.3.4部署多个2.1 EJB的问题

时间:2008-09-26 20:23:48

标签: java java-ee ejb oc4j ejb-jar.xml

我遇到了从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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

问题是我们的部署配置文件中的多个引用。我们为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的废话就是造成这种情况的原因。