我在WebSphere上使用OpenJPA 1.2.3和DB2。 有没有办法以允许相同应用程序(EAR)根据环境(DEV,ACPT,PROD等)更改模式名称的方式构建和捆绑我的应用程序。
我的PU设置为容器管理,如下所示:
<persistence>
<persistence-unit name="My_PU" transaction-type="JTA">
<jta-data-source>jdbc/DataSource</jta-data-source>
...
<properties>
<property name="openjpa.jdbc.Schema" value="MYSCHEMA"/>
<property name="openjpa.TransactionMode" value="managed"/>
<property name="openjpa.ConnectionFactoryMode" value="managed"/>
</properties>
</persistence-unit>
</persistence>
我已经考虑过把它放在ORM.xml中,但这仍然是架构的静态值,并没有外化设置;此外,它似乎不起作用(我已经看到很多线程讨论这个)。我还考虑将此配置放入WebSphere数据源;这似乎也不起作用。
- 基思
答案 0 :(得分:3)
我不熟悉OpenJPA,但我猜测openjpa.jdbc.Schema
属性是可选的。数据源(即jdbc/DataSource
处的数据源)将指示正在使用的默认模式。
您是否尝试过离开酒店?
答案 1 :(得分:2)
你可以使用maven。
1 - 为项目pom文件或maven设置中的每个构建方案定义配置文件。
<profiles>
<profile>
<id>DEV Profile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<propertis>
<db-schema>DEVSCHEMA</db-schema>
</propertis>
</profile>
<profile>
<id>PROD Profile</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<propertis>
<db-schema>PRODSCHEMA</db-schema>
</propertis>
</profile>
</profiles>
2-更改你的persistence.xml,如下所示:
<persistence>
<persistence-unit name="persistent-unit" transaction-type="JTA">
<jta-data-source>jdbc/DataSource</jta-data-source>
...
<properties>
<property name="openjpa.jdbc.Schema" value="${db-schema}"/>
<property name="openjpa.TransactionMode" value="managed"/>
<property name="openjpa.ConnectionFactoryMode" value="managed"/>
</properties>
</persistence-unit>
</persistence>
3-在项目pom文件中放入以下行。
<build>
<resources>
<resource>
<directory>src/main/resources/META-INF</directory>
<filtering>true</filtering>
<targetPath>/META-INF</targetPath>
</resource>
</resources>
</build>
答案 2 :(得分:0)
我只是创建单独的<persistence-unit>
元素,然后动态选择要绑定的元素
例如:
<persistence>
<persistence-unit name="DEV_PU" transaction-type="JTA">
<jta-data-source>jdbc/DataSource</jta-data-source>
...
<properties>
<property name="openjpa.jdbc.Schema" value="DEVSCHEMA"/>
<property name="openjpa.TransactionMode" value="managed"/>
<property name="openjpa.ConnectionFactoryMode" value="managed"/>
</properties>
</persistence-unit>
<persistence-unit name="PROD_PU" transaction-type="JTA">
<jta-data-source>jdbc/DataSource</jta-data-source>
...
<properties>
<property name="openjpa.jdbc.Schema" value="PRODSCHEMA"/>
<property name="openjpa.TransactionMode" value="managed"/>
<property name="openjpa.ConnectionFactoryMode" value="managed"/>
</properties>
</persistence-unit>
</persistence>
答案 3 :(得分:0)
您可以在代码中动态设置架构名称,如下所示:
@Entity
@Table(name = "ITEM", schema=Item.SCHEMA)
public class Item implements Serializable {
public static final String SCHEMA = System.getProperty("env.schema");
@Id
@Column (name = "ITEM_ID")
private String id;
@Column (name = "ITEM_NAME")
private String name;
}