2011-01-14 11 views
3

私はDB2でWebSphereでOpenJPA 1.2.3を使用しています。 同じアプリケーション(EAR)が環境(DEV、ACPT、PRODなど)に基づいて変更されたスキーマ名を持つことができるように、アプリケーションをビルドしてバンドルする方法はありますか?OpenJPAスキーマの設定

私の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データ・ソースに入れてみました。これはどちらもうまくいかないようです。

答えて

3

--Keith

私は、OpenJPAのに慣れていないんだけど、私はopenjpa.jdbc.Schemaプロパティがオプションであることを推測しています。データソース(すなわち、jdbc/DataSourceのデータソース)は、使用中のデフォルトスキーマを指示する。

プロパティを残してみましたか?

+0

はい、私は試したとなしています。ありがとう。 – KeithPE

+0

@Keith:OK、何が起こったのですか?ここで助けてください。 – skaffman

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> 
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; 
} 
+1

これはうまくいくとは思わないが、属性値は一定でなければならない:( – mglauche

2

あなたはMavenを使用することができます。

プロジェクトのPOMファイルやMaven設定で、各ビルドシナリオのプロファイルを1-定義します。

<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次のようにプロジェクトのPOMファイル内

<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-入れ、次の行。

<build>   
     <resources> 
      <resource> 
       <directory>src/main/resources/META-INF</directory> 
       <filtering>true</filtering> 
       <targetPath>/META-INF</targetPath> 
      </resource> 
     </resources> 
    </build>