2008-09-26 59 views
0

我遇到了從OC4J 10.1.2.3遷移到10.1.3.1.4的麻煩。問題在於具有多個EJB的應用程序(全部爲2.1,沒有EJB 3.0)。 Jdeveloper將採用默認的ejb-jar.xml(Jdeveloper在獨立的OC4J實例上運行它所需的),並將其打包到每個EJB JAR模塊中。這會導致應用程序服務器在部署時鑽取到每個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之間採取行動的方式相當...OC4J 10.1.3.4部署多個2.1 EJB的問題

備註:如果Web應用程序的JNDI查找代碼折射到「ejb/EJBName」,它們將工作。儘管如此,這是不可取的。

回答

0

問題在於我們的部署配置文件中有多個參考。我們爲每個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的廢話的結合是造成這種情況的原因。

1

您應該檢查Oracle文檔以查看您的情況。 Oracle®Containers for J2EE Enterprise JavaBeans開發人員指南是一個好開始 根據Oracle®Containers for J2EE Services Guide第2章:使用JNDI 當您使用「ejb/EJBName」形式執行「本地」查找時。如果要使用完整表單,則必須檢查「使用JNDI」一章中的「啓用全局JNDI查找」部分。

+0

我相信迫使它使用本地查找,我避免重複引用,這似乎是什麼打破了這一點。 – Zombies 2008-10-06 14:22:12