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プロパティはオプションであると推測しています。データソース (つまり のデータソース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 に答える