portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rwat...@apache.org
Subject svn commit: r942663 [1/5] - in /portals/jetspeed-2/portal/trunk: components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/ components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/migration/ components/jetspeed-db-tools/ com...
Date Mon, 10 May 2010 06:11:50 GMT
Author: rwatler
Date: Mon May 10 06:11:49 2010
New Revision: 942663

URL: http://svn.apache.org/viewvc?rev=942663&view=rev
Log:
JS2-1127: bulk 2.1.[34] and 2.2.0 to 2.2.[12] migration capability

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/
    portals/jetspeed-2/portal/trunk/components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/migration/JetspeedCapabilitiesMigration.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/JetspeedMigrationApplication.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/SQLScriptReader.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/tools/
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/tools/migration/JetspeedDBPageManagerMigration.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/tools/
    portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/tools/migration/JetspeedProfilerMigration.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/tools/
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/tools/migration/JetspeedRegistryMigration.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/tools/
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/tools/migration/JetspeedSecurityMigration.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/main/java/org/apache/jetspeed/tools/
    portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/main/java/org/apache/jetspeed/tools/migration/JetspeedSSOSecurityMigration.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/main/java/org/apache/jetspeed/tools/
    portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/components/jetspeed-statistics/src/main/java/org/apache/jetspeed/tools/migration/JetspeedStatisticsMigration.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/tools/migration/
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/tools/migration/JetspeedMigration.java
    portals/jetspeed-2/portal/trunk/jetspeed-installer/etc/database/lib/
    portals/jetspeed-2/portal/trunk/jetspeed-installer/etc/database/lib/log4j.xml
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/pom.xml
    portals/jetspeed-2/portal/trunk/jetspeed-ant-tasks/src/main/java/org/apache/jetspeed/anttasks/AntInstallerCheckConnection.java
    portals/jetspeed-2/portal/trunk/jetspeed-installer/   (props changed)
    portals/jetspeed-2/portal/trunk/jetspeed-installer/etc/ant-installer/antinstall-config.xml
    portals/jetspeed-2/portal/trunk/jetspeed-installer/etc/ant-installer/build.xml
    portals/jetspeed-2/portal/trunk/jetspeed-installer/etc/database/build.xml

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/migration/JetspeedCapabilitiesMigration.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/migration/JetspeedCapabilitiesMigration.java?rev=942663&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/migration/JetspeedCapabilitiesMigration.java
(added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-capability/src/main/java/org/apache/jetspeed/tools/migration/JetspeedCapabilitiesMigration.java
Mon May 10 06:11:49 2010
@@ -0,0 +1,206 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.tools.migration;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ * Jetspeed Migration for Capabilities component.
+ * 
+ * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
+ * @version $Id$
+ */
+public class JetspeedCapabilitiesMigration implements JetspeedMigration
+{
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.tools.migration.JetspeedMigration#getName()
+     */
+    public String getName()
+    {
+        return "Capabilities";
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.tools.migration.JetspeedMigration#detectSourceVersion(java.sql.Connection,
int)
+     */
+    public int detectSourceVersion(Connection sourceConnection, int sourceVersion) throws
SQLException
+    {
+        // no migration required in capabilities schema
+        return ((sourceVersion > JETSPEED_SCHEMA_VERSION_UNKNOWN) ? sourceVersion : JETSPEED_SCHEMA_VERSION_2_1_3);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.tools.migration.JetspeedMigration#migrate(java.sql.Connection,
int, java.sql.Connection)
+     */
+    public int migrate(Connection sourceConnection, int sourceVersion, Connection targetConnection)
throws SQLException
+    {
+        int rowsMigrated = 0;
+        
+        // MEDIA_TYPE
+        PreparedStatement mediaTypeInsertStatement = targetConnection.prepareStatement("INSERT
INTO MEDIA_TYPE (MEDIATYPE_ID, NAME, CHARACTER_SET, TITLE, DESCRIPTION) VALUES (?, ?, ?, ?,
?);");
+        Statement mediaTypeQueryStatement = sourceConnection.createStatement();
+        ResultSet mediaTypeResultSet = mediaTypeQueryStatement.executeQuery("SELECT MEDIATYPE_ID,
NAME, CHARACTER_SET, TITLE, DESCRIPTION FROM MEDIA_TYPE;");
+        while (mediaTypeResultSet.next())
+        {
+            mediaTypeInsertStatement.setInt(1, mediaTypeResultSet.getInt(1));
+            mediaTypeInsertStatement.setString(2, mediaTypeResultSet.getString(2));
+            mediaTypeInsertStatement.setString(3, mediaTypeResultSet.getString(3));
+            mediaTypeInsertStatement.setString(4, mediaTypeResultSet.getString(4));
+            mediaTypeInsertStatement.setString(5, mediaTypeResultSet.getString(5));
+            mediaTypeInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        mediaTypeResultSet.close();
+        mediaTypeQueryStatement.close();
+        mediaTypeInsertStatement.close();
+        
+        // CLIENT
+        PreparedStatement clientInsertStatement = targetConnection.prepareStatement("INSERT
INTO CLIENT (CLIENT_ID, EVAL_ORDER, NAME, USER_AGENT_PATTERN, MANUFACTURER, MODEL, VERSION,
PREFERRED_MIMETYPE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");
+        Statement clientQueryStatement = sourceConnection.createStatement();
+        ResultSet clientResultSet = clientQueryStatement.executeQuery("SELECT CLIENT_ID,
EVAL_ORDER, NAME, USER_AGENT_PATTERN, MANUFACTURER, MODEL, VERSION, PREFERRED_MIMETYPE_ID
FROM CLIENT;");
+        while (clientResultSet.next())
+        {
+            clientInsertStatement.setInt(1, clientResultSet.getInt(1));
+            clientInsertStatement.setInt(2, clientResultSet.getInt(2));
+            clientInsertStatement.setString(3, clientResultSet.getString(3));
+            clientInsertStatement.setString(4, clientResultSet.getString(4));
+            clientInsertStatement.setString(5, clientResultSet.getString(5));
+            clientInsertStatement.setString(6, clientResultSet.getString(6));
+            clientInsertStatement.setString(7, clientResultSet.getString(7));
+            clientInsertStatement.setInt(8, clientResultSet.getInt(8));
+            clientInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        clientResultSet.close();
+        clientQueryStatement.close();
+        clientInsertStatement.close();
+        
+        // MIMETYPE
+        PreparedStatement mimeTypeInsertStatement = targetConnection.prepareStatement("INSERT
INTO MIMETYPE (MIMETYPE_ID, NAME) VALUES (?, ?);");
+        Statement mimeTypeQueryStatement = sourceConnection.createStatement();
+        ResultSet mimeTypeResultSet = mimeTypeQueryStatement.executeQuery("SELECT MIMETYPE_ID,
NAME FROM MIMETYPE;");
+        while (mimeTypeResultSet.next())
+        {
+            mimeTypeInsertStatement.setInt(1, mimeTypeResultSet.getInt(1));
+            mimeTypeInsertStatement.setString(2, mimeTypeResultSet.getString(2));
+            mimeTypeInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        mimeTypeResultSet.close();
+        mimeTypeQueryStatement.close();
+        mimeTypeInsertStatement.close();
+        
+        // CAPABILITY
+        PreparedStatement capabilityInsertStatement = targetConnection.prepareStatement("INSERT
INTO CAPABILITY (CAPABILITY_ID, CAPABILITY) VALUES (?, ?);");
+        Statement capabilityQueryStatement = sourceConnection.createStatement();
+        ResultSet capabilityResultSet = capabilityQueryStatement.executeQuery("SELECT CAPABILITY_ID,
CAPABILITY FROM CAPABILITY;");
+        while (capabilityResultSet.next())
+        {
+            capabilityInsertStatement.setInt(1, capabilityResultSet.getInt(1));
+            capabilityInsertStatement.setString(2, capabilityResultSet.getString(2));
+            capabilityInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        capabilityResultSet.close();
+        capabilityQueryStatement.close();
+        capabilityInsertStatement.close();
+
+        // CLIENT_TO_CAPABILITY
+        PreparedStatement clientToCapabilityInsertStatement = targetConnection.prepareStatement("INSERT
INTO CLIENT_TO_CAPABILITY (CLIENT_ID, CAPABILITY_ID) VALUES (?, ?);");
+        Statement clientToCapabilityQueryStatement = sourceConnection.createStatement();
+        ResultSet clientToCapabilityResultSet = clientToCapabilityQueryStatement.executeQuery("SELECT
CLIENT_ID, CAPABILITY_ID FROM CLIENT_TO_CAPABILITY;");
+        while (clientToCapabilityResultSet.next())
+        {
+            clientToCapabilityInsertStatement.setInt(1, clientToCapabilityResultSet.getInt(1));
+            clientToCapabilityInsertStatement.setInt(2, clientToCapabilityResultSet.getInt(2));
+            clientToCapabilityInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        clientToCapabilityResultSet.close();
+        clientToCapabilityQueryStatement.close();
+        clientToCapabilityInsertStatement.close();
+
+        // CLIENT_TO_MIMETYPE
+        PreparedStatement clientToMimeTypeInsertStatement = targetConnection.prepareStatement("INSERT
INTO CLIENT_TO_MIMETYPE (CLIENT_ID, MIMETYPE_ID) VALUES (?, ?);");
+        Statement clientToMimeTypeQueryStatement = sourceConnection.createStatement();
+        ResultSet clientToMimeTypeResultSet = clientToMimeTypeQueryStatement.executeQuery("SELECT
CLIENT_ID, MIMETYPE_ID FROM CLIENT_TO_MIMETYPE;");
+        while (clientToMimeTypeResultSet.next())
+        {
+            clientToMimeTypeInsertStatement.setInt(1, clientToMimeTypeResultSet.getInt(1));
+            clientToMimeTypeInsertStatement.setInt(2, clientToMimeTypeResultSet.getInt(2));
+            clientToMimeTypeInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        clientToMimeTypeResultSet.close();
+        clientToMimeTypeQueryStatement.close();
+        clientToMimeTypeInsertStatement.close();
+
+        // MEDIATYPE_TO_CAPABILITY
+        PreparedStatement mediaTypeToCapabilityInsertStatement = targetConnection.prepareStatement("INSERT
INTO MEDIATYPE_TO_CAPABILITY (MEDIATYPE_ID, CAPABILITY_ID) VALUES (?, ?);");
+        Statement mediaTypeToCapabilityQueryStatement = sourceConnection.createStatement();
+        ResultSet mediaTypeToCapabilityResultSet = mediaTypeToCapabilityQueryStatement.executeQuery("SELECT
MEDIATYPE_ID, CAPABILITY_ID FROM MEDIATYPE_TO_CAPABILITY;");
+        while (mediaTypeToCapabilityResultSet.next())
+        {
+            mediaTypeToCapabilityInsertStatement.setInt(1, mediaTypeToCapabilityResultSet.getInt(1));
+            mediaTypeToCapabilityInsertStatement.setInt(2, mediaTypeToCapabilityResultSet.getInt(2));
+            mediaTypeToCapabilityInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        mediaTypeToCapabilityResultSet.close();
+        mediaTypeToCapabilityQueryStatement.close();
+        mediaTypeToCapabilityInsertStatement.close();
+
+        // MEDIATYPE_TO_MIMETYPE
+        PreparedStatement mediaTypeToMimeTypeInsertStatement = targetConnection.prepareStatement("INSERT
INTO MEDIATYPE_TO_MIMETYPE (MEDIATYPE_ID, MIMETYPE_ID) VALUES (?, ?);");
+        Statement mediaTypeToMimeTypeQueryStatement = sourceConnection.createStatement();
+        ResultSet mediaTypeToMimeTypeResultSet = mediaTypeToMimeTypeQueryStatement.executeQuery("SELECT
MEDIATYPE_ID, MIMETYPE_ID FROM MEDIATYPE_TO_MIMETYPE;");
+        while (mediaTypeToMimeTypeResultSet.next())
+        {
+            mediaTypeToMimeTypeInsertStatement.setInt(1, mediaTypeToMimeTypeResultSet.getInt(1));
+            mediaTypeToMimeTypeInsertStatement.setInt(2, mediaTypeToMimeTypeResultSet.getInt(2));
+            mediaTypeToMimeTypeInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        mediaTypeToMimeTypeResultSet.close();
+        mediaTypeToMimeTypeQueryStatement.close();
+        mediaTypeToMimeTypeInsertStatement.close();
+        
+        // OJB_HL_SEQ
+        PreparedStatement ojbInsertStatement = targetConnection.prepareStatement("INSERT
INTO OJB_HL_SEQ (TABLENAME, FIELDNAME, MAX_KEY, GRAB_SIZE, VERSION) VALUES (?, ?, ?, ?, ?);");
+        Statement ojbQueryStatement = sourceConnection.createStatement();
+        ResultSet ojbResultSet = ojbQueryStatement.executeQuery("SELECT TABLENAME, FIELDNAME,
MAX_KEY, GRAB_SIZE, VERSION FROM OJB_HL_SEQ WHERE TABLENAME IN ('SEQ_CAPABILITY', 'SEQ_CLIENT',
'SEQ_MEDIA_TYPE', 'SEQ_MIMETYPE');");
+        while (ojbResultSet.next())
+        {
+            ojbInsertStatement.setString(1, ojbResultSet.getString(1));
+            ojbInsertStatement.setString(2, ojbResultSet.getString(2));
+            ojbInsertStatement.setInt(3, ojbResultSet.getInt(3));
+            ojbInsertStatement.setInt(4, ojbResultSet.getInt(4));
+            ojbInsertStatement.setInt(5, ojbResultSet.getInt(5));
+            ojbInsertStatement.executeUpdate();
+            rowsMigrated++;
+        }
+        ojbResultSet.close();
+        ojbQueryStatement.close();
+        ojbInsertStatement.close();
+        
+        return rowsMigrated;
+    }
+}

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/pom.xml?rev=942663&r1=942662&r2=942663&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/pom.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/pom.xml Mon May 10 06:11:49
2010
@@ -124,6 +124,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.portals.jetspeed-2</groupId>
+      <artifactId>jetspeed-statistics</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.portals.jetspeed-2</groupId>
       <artifactId>jetspeed-serializer</artifactId>
       <exclusions>
         <exclusion>

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/JetspeedMigrationApplication.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/JetspeedMigrationApplication.java?rev=942663&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/JetspeedMigrationApplication.java
(added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/JetspeedMigrationApplication.java
Mon May 10 06:11:49 2010
@@ -0,0 +1,313 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.tools.migration;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.regex.Pattern;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.pool.impl.GenericObjectPool;
+import org.apache.jetspeed.components.datasource.DBCPDatasourceComponent;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Jetspeed Migration application.
+ * 
+ * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
+ * @version $Id$
+ */
+public class JetspeedMigrationApplication
+{
+    private static final Logger log = LoggerFactory.getLogger(JetspeedMigrationApplication.class);
+    
+    private String sourceDBUsername;
+    private String sourceDBPassword;
+    private String sourceJDBCUrl;
+    private String sourceJDBCDriverClass;
+    private String dbUsername;
+    private String dbPassword;
+    private String jdbcUrl;
+    private String jdbcDriverClass;
+    private File dropSchemaSQLScriptFile;
+    private File createSchemaSQLScriptFile;
+    private DBCPDatasourceComponent sourceDataSourceFactory;
+    private DBCPDatasourceComponent targetDataSourceFactory;
+    private JetspeedMigration [] migrations;
+    
+    /**
+     * Construct application instance using arguments.
+     * 
+     * @param args application arguments
+     */
+    public JetspeedMigrationApplication(String[] args)
+    {
+        for (String arg : args)
+        {
+            if (arg.startsWith("-source-db-username="))
+            {
+                this.sourceDBUsername = arg.substring(20);
+            }
+            else if (arg.startsWith("-source-db-password="))
+            {
+                this.sourceDBPassword = arg.substring(20);
+            }
+            else if (arg.startsWith("-source-jdbc-url="))
+            {
+                this.sourceJDBCUrl = arg.substring(17);
+            }
+            else if (arg.startsWith("-source-jdbc-driver-class="))
+            {
+                this.sourceJDBCDriverClass = arg.substring(26);
+            }
+            else if (arg.startsWith("-db-username="))
+            {
+                this.dbUsername = arg.substring(13);
+            }
+            else if (arg.startsWith("-db-password="))
+            {
+                this.dbPassword = arg.substring(13);
+            }
+            else if (arg.startsWith("-jdbc-url="))
+            {
+                this.jdbcUrl = arg.substring(10);
+            }
+            else if (arg.startsWith("-jdbc-driver-class="))
+            {
+                this.jdbcDriverClass = arg.substring(19);
+            }
+            else if (arg.startsWith("-drop-schema-sql="))
+            {
+                this.dropSchemaSQLScriptFile = new File(arg.substring(17));
+                if (!this.dropSchemaSQLScriptFile.isFile())
+                {
+                    throw new RuntimeException("Cannot access -drop-schema-sql file: "+this.dropSchemaSQLScriptFile);
+                }
+            }
+            else if (arg.startsWith("-create-schema-sql="))
+            {
+                this.createSchemaSQLScriptFile = new File(arg.substring(19));
+                if (!this.createSchemaSQLScriptFile.isFile())
+                {
+                    throw new RuntimeException("Cannot access -create-schema-sql file: "+this.createSchemaSQLScriptFile);
+                }
+            }
+        }
+        
+        if (this.sourceDBUsername == null)
+        {
+            throw new RuntimeException("Missing -source-db-username argument");
+        }
+        if (this.sourceDBPassword == null)
+        {
+            throw new RuntimeException("Missing -source-db-password argument");
+        }
+        if (this.sourceJDBCUrl == null)
+        {
+            throw new RuntimeException("Missing -source-jdbc-url argument");
+        }
+        if (this.sourceJDBCDriverClass == null)
+        {
+            throw new RuntimeException("Missing -source-jdbc-driver-class argument");
+        }
+        if (this.dbUsername == null)
+        {
+            throw new RuntimeException("Missing -db-username argument");
+        }
+        if (this.dbPassword == null)
+        {
+            throw new RuntimeException("Missing -db-password argument");
+        }
+        if (this.jdbcUrl == null)
+        {
+            throw new RuntimeException("Missing -jdbc-url argument");
+        }
+        if (this.jdbcDriverClass == null)
+        {
+            throw new RuntimeException("Missing -jdbc-driver-class argument");
+        }
+        if (this.dropSchemaSQLScriptFile == null)
+        {
+            throw new RuntimeException("Missing -drop-schema-sql argument");
+        }
+        if (this.createSchemaSQLScriptFile == null)
+        {
+            throw new RuntimeException("Missing -create-schema-sql argument");
+        }
+        
+        if (this.jdbcUrl.equals(this.sourceJDBCUrl))
+        {
+            throw new RuntimeException("Source and target JDBC databases must be different:
"+this.jdbcUrl);
+        }
+
+        sourceDataSourceFactory = new DBCPDatasourceComponent(this.sourceDBUsername, this.sourceDBPassword,
this.sourceJDBCDriverClass, this.sourceJDBCUrl, 2, 0, GenericObjectPool.WHEN_EXHAUSTED_GROW,
true);
+        targetDataSourceFactory = new DBCPDatasourceComponent(this.dbUsername, this.dbPassword,
this.jdbcDriverClass, this.jdbcUrl, 2, 0, GenericObjectPool.WHEN_EXHAUSTED_GROW, true);
+        
+        migrations = new JetspeedMigration[]{new JetspeedCapabilitiesMigration(),
+                                             new JetspeedStatisticsMigration(),
+                                             new JetspeedDBPageManagerMigration(),
+                                             new JetspeedProfilerMigration(),
+                                             new JetspeedRegistryMigration(),
+                                             new JetspeedSecurityMigration(),
+                                             new JetspeedSSOSecurityMigration()};
+    }
+    
+    /**
+     * Perform application migration operation.
+     * 
+     * @throws IOException when migration error is encountered
+     * @throws SQLException when SQL migration error is encountered
+     */
+    public void run() throws IOException, SQLException
+    {
+        // start data source pools
+        sourceDataSourceFactory.start();
+        targetDataSourceFactory.start();
+        DataSource sourceDataSource = sourceDataSourceFactory.getDatasource();
+        DataSource targetDataSource = targetDataSourceFactory.getDatasource();
+        
+        // open connections
+        Connection sourceConnection = sourceDataSource.getConnection();
+        Connection targetConnection = targetDataSource.getConnection();
+        
+        // clean target database
+        log.info("Clean target database...");
+        executeSQLScript(targetConnection, dropSchemaSQLScriptFile, true);
+        // create tables and indices in target database
+        log.info("Initialize target database schema tables and indices...");
+        executeSQLScript(targetConnection, createSchemaSQLScriptFile, false, "^\\s*create\\s+(?:table|index|unique\\s+index)\\s",
true);
+
+        // determine and validate schema version
+        int sourceVersion = JetspeedMigration.JETSPEED_SCHEMA_VERSION_UNKNOWN;
+        for (JetspeedMigration migration : migrations)
+        {
+            sourceVersion = migration.detectSourceVersion(sourceConnection, sourceVersion);
+        }
+        for (JetspeedMigration migration : migrations)
+        {
+            sourceVersion = migration.detectSourceVersion(sourceConnection, sourceVersion);
+        }
+        log.info("Detected source schema version: "+sourceVersion);
+
+        // migrate data from source to target database
+        for (JetspeedMigration migration : migrations)
+        {
+            log.info("Migrating "+migration.getName()+" data...");
+            int rowsMigrated = migration.migrate(sourceConnection, sourceVersion, targetConnection);
+            log.info("Migrated "+rowsMigrated+" "+migration.getName()+" data rows.");
+        }
+
+        // add constraints and remaining schema to target database
+        log.info("Setup target database schema constraints...");
+        executeSQLScript(targetConnection, createSchemaSQLScriptFile, false, "^\\s*create\\s+(?:table|index|unique\\s+index)\\s",
false);
+
+        // close connections
+        sourceConnection.close();
+        targetConnection.close();
+
+        // stop data source pools
+        sourceDataSourceFactory.stop();
+        targetDataSourceFactory.stop();
+    }
+    
+    /**
+     * Execute SQL script statements.
+     * 
+     * @param connection database connection
+     * @param sqlScriptFile SQL script file
+     * @param ignoreSQLErrors ignore SQL errors
+     * @throws IOException when script read error is encountered
+     * @throws SQLException when SQL statement error is encountered
+     */
+    private void executeSQLScript(Connection connection, File sqlScriptFile, boolean ignoreSQLErrors)
throws IOException, SQLException
+    {
+        executeSQLScript(connection, sqlScriptFile, ignoreSQLErrors, null, true);
+    }
+
+    /**
+     * Execute SQL script statements that match specified regexp.
+     * 
+     * @param connection database connection
+     * @param sqlScriptFile SQL script file
+     * @param ignoreSQLErrors ignore SQL errors
+     * @param statementsRegexp statements matching regexp or null
+     * @param include include matching statements
+     * @throws IOException when script read error is encountered
+     * @throws SQLException when SQL statement error is encountered
+     */
+    private void executeSQLScript(Connection connection, File sqlScriptFile, boolean ignoreSQLErrors,
String statementsRegexp, boolean include) throws IOException, SQLException
+    {
+        Pattern statementsPattern = ((statementsRegexp != null) ? Pattern.compile(statementsRegexp,
Pattern.CASE_INSENSITIVE) : null);
+        
+        SQLScriptReader reader = new SQLScriptReader(sqlScriptFile);
+        for (;;)
+        {
+            String scriptStatement = reader.readSQLStatement();
+            if (scriptStatement != null)
+            {
+                if ((statementsPattern == null) || (statementsPattern.matcher(scriptStatement).find()
== include))
+                {
+                    Statement statement = connection.createStatement();
+                    if (ignoreSQLErrors)
+                    {
+                        try
+                        {
+                            statement.execute(scriptStatement);                         
  
+                        }
+                        catch (SQLException sqle)
+                        {
+                        }
+                    }
+                    else
+                    {
+                        statement.execute(scriptStatement);
+                    }
+                }
+            }
+            else
+            {
+                break;
+            }
+        }
+    }
+    
+    /**
+     * Application main entry point.
+     * 
+     * @param args application arguments
+     */
+    public static void main(String[] args)
+    {
+        try
+        {
+            JetspeedMigrationApplication application = new JetspeedMigrationApplication(args);
+            application.run();
+            System.exit(0);
+        }
+        catch (Exception e)
+        {
+            log.error("Unexpected exception: "+e, e);
+            System.exit(-1);
+        }
+    }
+}

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/SQLScriptReader.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/SQLScriptReader.java?rev=942663&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/SQLScriptReader.java
(added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-db-tools/src/main/java/org/apache/jetspeed/tools/migration/SQLScriptReader.java
Mon May 10 06:11:49 2010
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.tools.migration;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+/**
+ * SQL Script Reader
+ * 
+ * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
+ * @version $Id$
+ */
+public class SQLScriptReader
+{
+    private BufferedReader reader;
+    
+    public SQLScriptReader(File scriptFile) throws FileNotFoundException
+    {
+        this.reader = new BufferedReader(new FileReader(scriptFile));
+    }
+    
+    public String readSQLStatement() throws IOException
+    {
+        StringBuilder sqlStatement = new StringBuilder();
+        boolean comment = false;
+        for (;;)
+        {
+            String line = reader.readLine();
+            if (line != null)
+            {
+                line = line.trim();
+                if (comment)
+                {
+                    comment = !line.endsWith("*/");
+                }
+                else
+                {
+                    comment = line.startsWith("/*");
+                    if (!comment && !line.startsWith("--") && !line.startsWith("//")
&& !line.startsWith("#") && (line.length() > 0))
+                    {
+                        if (sqlStatement.length() > 0)
+                        {
+                            sqlStatement.append(' ');
+                        }
+                        sqlStatement.append(line);
+                        if (line.endsWith(";"))
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                sqlStatement.setLength(0);
+                break;
+            }
+        }
+        return ((sqlStatement.length() > 0) ? sqlStatement.toString() : null);
+    }
+
+    public void close() throws IOException
+    {
+        reader.close();
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org


Mime
View raw message