我的应用程序使用Spring MVC 4.0.5和Toplink Essentials JPA 2.1-60,并部署到Weblogic 10.3.6.0服务器。
我正在尝试部署我的应用程序的2个实例,以便创建开发和测试部署。这两个都将使用相同的.war文件。这两个实例将具有不同的上下文根以及连接到不同的数据源。
这将在weblogic部署计划中定义。
我能够毫无问题地更改context-root。问题是尝试更改数据源。
当我直接从Eclipse运行服务器时,数据源在weblogic.xml中定义。 但是当我构建.war文件并手动部署应用程序时,数据源仅在persistence.xml中定义。换句话说,我可以随心所欲地更改weblogic.xml,它不会影响它连接到哪个数据源。我必须在persistence.xml中更改它才能连接到其他数据源。
要么我不能从我的部署计划(plan.xml)编辑persistence.xml,要么我的plan.xml错误。
有没有办法强制persistence.xml引用weblogic.xml数据源而不是硬编码数据源?因为我知道我可以使用部署计划编辑weblogic.xml。如果没有,有没有办法直接从部署计划编辑persistence.xml数据源(从jdbc / PQRS更改为jdbs / PQRSTest)?
我不确定需要哪些文件才能提供帮助,因此我将包含所有这些文件。
感谢您的帮助!
weblogic.xml中
<!-- web application's server path for deployment -->
<weblogic-version>10.3.6</weblogic-version>
<context-root>pqrs</context-root>
...
<resource-description>
<res-ref-name>jdbc/PQRS</res-ref-name>
<jndi-name>jdbc/PQRS</jndi-name>
</resource-description>
的persistence.xml
<persistence-unit name="pqrsPU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<non-jta-data-source>jdbc/PQRS</non-jta-data-source>
...
<properties>
<property name="toplink.weaving" value="false"/>
<!-- <property name="toplink.logging.level" value="FINE"/> -->
</properties>
</persistence-unit>
的web.xml
<web-app>
...
<resource-ref>
<description>My DataSource Reference</description>
<res-ref-name>jdbc/PQRS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
applicationContext.xml中
<!-- Processes PersistenceUnit and PersistenceContext annotations for injection of JPA resources -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<!-- Creates a EntityManagerFactory for use with the JPA provider -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="pqrsPU"/>
<property name="dataSource" ref="dataSource" />
<!-- Needs spring instrument library along with aspectjrj.jar & aspectjweaver.jar libraries
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
-->
</bean>
plan.xml中
<deployment-plan>
<application-name>crr</application-name>
<variable-definition>
<variable>
<name>contextRootName</name>
<value>/pqrsTest</value>
</variable>
<variable>
<name>dataSourceName</name>
<value>jdbc/PQRSTest</value>
</variable>
</variable-definition>
<module-override>
<module-name>pqrs.war</module-name>
<module-type>war</module-type>
<module-descriptor external="false">
<root-element>weblogic-web-app</root-element>
<uri>WEB-INF/weblogic.xml</uri>
<variable-assignment>
<name>contextRootName</name>
<xpath>/weblogic-web-app/context-root</xpath>
<operation>replace</operation>
</variable-assignment>
</module-descriptor>
<module-descriptor external="false">
<root-element>persistence</root-element>
<uri>WEB-INF/classes/META-INF/persistence.xml</uri>
<variable-assignment>
<name>dataSourceName</name>
<xpath>/persistence/persistence-unit[name="pqrsPU"]/non-jta-data-source</xpath>
<operation>replace</operation>
</variable-assignment>
</module-descriptor>
</module-override>
<config-root>/usr/local/oracle/wls103607/domains/Dpqrs/apps/test</config-root>
</deployment-plan>
答案 0 :(得分:0)
如果在persistence.xml中使用java:comp / env / jdbc / myds样式的jndi名称,则必须在weblogic * xml中定义绑定
那么,你可以使用部署计划来改变它
(我自己还没试过)