2011-01-14 82 views
3

我在DB2上使用WebSphere上的OpenJPA 1.2.3。 有沒有一種方法來構建和捆綁我的應用程序,允許相同的應用程序(EAR)根據環境(DEV,ACPT,PROD等)改變Schema名稱。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數據源中;這似乎也不起作用。

--Keith

回答

3

我不熟悉的OpenJPA,但我猜的openjpa.jdbc.Schema屬性是可選的。數據源(即jdbc/DataSource處的數據源)將指定正在使用的默認模式。

你有沒有試過把物業搬出去?

+0

是的,我曾嘗試使用和不使用。謝謝。 – KeithPE 2011-01-14 21:24:11

+0

@凱斯:好的,發生了什麼事?幫幫我,在這裏。 – skaffman 2011-01-14 21:26:45

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; 
} 
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如下:項目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>