2016-11-10 4 views
0

Meine Anwendung verwendet WAS 7 und Oracle 11g. Ich freue mich darauf, keine Ausfallzeiten während der Bereitstellung zu erreichen. Die Bereitstellung umfasst EAR-Bereitstellungen für WAS und DDL/DML-Änderungen an Oracle DB. Diese Frage konzentriert sich auf keine Downtime für Oracle DB während des DDL/DML-Upgrades und die Unterstützung neuer Datendefinitionen in Java EE-Anwendungen.Oracle Edition-Ansichten und JPA oder Hibernate

Eines der Teams hier erreicht dies mit Oracle Editioning Views (Edition basierte Revision) Schicht für jede Tabelle. Meine Anwendung verwendet jedoch JPA und Hibernate. Ich habe ein kleines PoC durchgeführt, um Entitäten für Editionsansichten zu erstellen. Es scheint jedoch, dass JPA oder Hibernate sie nicht unterstützt.

Gibt es Informationen zur Verwendung von Editionsansichten mit JPA oder Hibernate?

Antwort

0

Ich würde vorschlagen, dass Sie sich Liquibase anschauen, damit die Anwendung ihre eigene Datenbank aktuell halten kann.

Wenn Sie Frühling verwenden ist es sehr einfach, Sie brauchen nur eine Feder Bohne wie:

@Bean 
public SpringLiquibase liquibase() { 
    log.debug("Configuring Liquibase"); 
    SpringLiquibase liquibase = new SpringLiquibase(); 
    liquibase.setDataSource(dataSource()); 
    liquibase.setChangeLog("classpath:config/liquibase/master.xml"); 
    liquibase.setContexts("development, production"); 
    return liquibase; 
} 

Dann sind Sie ein Änderungsprotokoll haben:

databaseChangeLog 
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
     http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 

    <changeSet id="1" author="bob"> 
     <createTable tableName="department"> 
      <column name="id" type="int"> 
       <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"> 
       <constraints nullable="false"/> 
      </column> 
      <column name="active" type="boolean" defaultValueBoolean="true"/> 
     </createTable> 
    </changeSet> 

</databaseChangeLog> 

Jedes Mal, wenn die Anwendung gestartet wird es prüfen, ob Es gibt Änderungen, die angewendet werden müssen.

+0

Danke für den Vorschlag. Ich habe Liquibase noch nie probiert. Will ein paar PoC machen, um zu sehen, wie es hilft. – ak2205

0

Ein Weg zu gehen ist mit partitionierten Tabellen für die Hauptdatentabelle und eine Zwischenspeichertabelle für Änderungen. Sie nehmen die Änderungen der Staging-Tabelle und dann die Swap mit:

ALTER TABLE main_table 
EXCHANGE PARTITION main_table_1001 WITH TABLE staging_table 
WITHOUT VALIDATION 
UPDATE GLOBAL INDEXES; 

Auf diese Weise Ihre Client (d. H Java Web app) wird nicht einmal die Änderungen bemerken im Backend geschieht.