3

我在带有 DB2 的 WebSphere 上使用 OpenJPA 1.2.3。有没有办法以允许同一应用程序(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 数据源中;这似乎也不起作用。

——基思

4

4 回答 4

3

我不熟悉 OpenJPA,但我猜该openjpa.jdbc.Schema属性是可选的。数据源(即 at 的那个jdbc/DataSource)将指示使用的默认模式。

您是否尝试过将财产排除在外?

于 2011-01-14T21:09:28.570 回答
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>
于 2014-02-17T16:33:03.493 回答
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>
于 2012-09-04T19:06:05.237 回答
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;
}
于 2012-10-23T05:32:16.907 回答