You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by bl...@apache.org on 2012/08/08 17:41:16 UTC
svn commit: r1370814 - in /sqoop/branches/sqoop2:
common/src/main/java/org/apache/sqoop/model/
core/src/main/java/org/apache/sqoop/framework/
core/src/main/java/org/apache/sqoop/repository/
repository/repository-derby/src/main/java/org/apache/sqoop/rep...
Author: blee
Date: Wed Aug 8 15:41:15 2012
New Revision: 1370814
URL: http://svn.apache.org/viewvc?rev=1370814&view=rev
Log:
SQOOP-535: Support splitting metadata to connector and framework specific
Added:
sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFramework.java
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkConstants.java
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java
Modified:
sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/Repository.java
sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
sqoop/branches/sqoop2/server/src/main/java/org/apache/sqoop/server/ServerInitializer.java
Modified: sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java (original)
+++ sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MConnector.java Wed Aug 8 15:41:15 2012
@@ -17,30 +17,30 @@
*/
package org.apache.sqoop.model;
-import java.util.ArrayList;
import java.util.List;
-public final class MConnector extends MPersistableEntity {
+/**
+ * Connector metadata.
+ *
+ * Includes unique id that identifies connector in metadata store, unique human
+ * readable name, corresponding name and all forms for both connections and
+ * jobs.
+ */
+public final class MConnector extends MFramework {
private final String uniqueName;
private final String className;
- private final List<MForm> connectionForms;
- private final List<MForm> jobForms;
public MConnector(String uniqueName, String className,
List<MForm> connectionForms, List<MForm> jobForms) {
+ super(connectionForms, jobForms);
+
if (uniqueName == null || className == null) {
throw new NullPointerException();
}
this.uniqueName = uniqueName;
this.className = className;
-
- this.connectionForms = new ArrayList<MForm>(connectionForms.size());
- this.connectionForms.addAll(connectionForms);
-
- this.jobForms = new ArrayList<MForm>(jobForms.size());
- this.jobForms.addAll(jobForms);
}
public String getUniqueName() {
@@ -55,8 +55,8 @@ public final class MConnector extends MP
public String toString() {
StringBuilder sb = new StringBuilder("connector-");
sb.append(uniqueName).append(":").append(getPersistenceId()).append(":");
- sb.append(className).append("; conn-forms:").append(connectionForms);
- sb.append("; job-forms:").append(jobForms);
+ sb.append(className).append("; conn-forms:").append(getConnectionForms());
+ sb.append("; job-forms:").append(getJobForms());
return sb.toString();
}
@@ -74,30 +74,15 @@ public final class MConnector extends MP
MConnector mc = (MConnector) other;
return (uniqueName.equals(mc.uniqueName)
&& className.equals(mc.className))
- && connectionForms.equals(mc.connectionForms)
- && jobForms.equals(mc.jobForms);
+ && super.equals(other);
}
@Override
public int hashCode() {
- int result = 23;
+ int result = super.hashCode();
result = 31 * result + uniqueName.hashCode();
result = 31 * result + className.hashCode();
- for (MForm cmf : connectionForms) {
- result = 31 * result + cmf.hashCode();
- }
- for (MForm jmf : jobForms) {
- result = 31 * result + jmf.hashCode();
- }
return result;
}
-
- public List<MForm> getConnectionForms() {
- return connectionForms;
- }
-
- public List<MForm> getJobForms() {
- return jobForms;
- }
}
Added: sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFramework.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFramework.java?rev=1370814&view=auto
==============================================================================
--- sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFramework.java (added)
+++ sqoop/branches/sqoop2/common/src/main/java/org/apache/sqoop/model/MFramework.java Wed Aug 8 15:41:15 2012
@@ -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.sqoop.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Metadata describing framework options for connections and jobs.
+ */
+public class MFramework extends MPersistableEntity {
+
+ private final List<MForm> connectionForms;
+ private final List<MForm> jobForms;
+
+ public MFramework(List<MForm> connectionForms, List<MForm> jobForms) {
+ this.connectionForms = new ArrayList<MForm>(connectionForms.size());
+ this.connectionForms.addAll(connectionForms);
+
+ this.jobForms = new ArrayList<MForm>(jobForms.size());
+ this.jobForms.addAll(jobForms);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("framework-");
+ sb.append(getPersistenceId()).append(":");
+ sb.append("; conn-forms:").append(connectionForms);
+ sb.append("; job-forms:").append(jobForms);
+
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == this) {
+ return true;
+ }
+
+ if (!(other instanceof MFramework)) {
+ return false;
+ }
+
+ MFramework mc = (MFramework) other;
+ return connectionForms.equals(mc.connectionForms)
+ && jobForms.equals(mc.jobForms);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = 23;
+ for (MForm cmf : connectionForms) {
+ result = 31 * result + cmf.hashCode();
+ }
+ for (MForm jmf : jobForms) {
+ result = 31 * result + jmf.hashCode();
+ }
+
+ return result;
+ }
+
+ public List<MForm> getConnectionForms() {
+ return connectionForms;
+ }
+
+ public List<MForm> getJobForms() {
+ return jobForms;
+ }
+}
Added: sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkConstants.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkConstants.java?rev=1370814&view=auto
==============================================================================
--- sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkConstants.java (added)
+++ sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkConstants.java Wed Aug 8 15:41:15 2012
@@ -0,0 +1,34 @@
+/**
+ * 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.sqoop.framework;
+
+/**
+ * Constants that are used in framework module.
+ */
+public class FrameworkConstants {
+
+ public static final String INPUT_CONN_MAX_SIMULTANEOUS_CONNECTIONS =
+ "inp-conn-max-connections";
+ public static final String INPUT_CONN_MAX_OUTPUT_FORMAT=
+ "inp-conn-output-format";
+
+ public static final String FORM_SECURITY =
+ "form-security";
+ public static final String FORM_OUTPUT =
+ "form-output";
+}
Added: sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java?rev=1370814&view=auto
==============================================================================
--- sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java (added)
+++ sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java Wed Aug 8 15:41:15 2012
@@ -0,0 +1,42 @@
+/**
+ * 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.sqoop.framework;
+
+import org.apache.sqoop.common.ErrorCode;
+
+/**
+ *
+ */
+public enum FrameworkError implements ErrorCode {
+
+ FRAMEWORK_0000("Metadata are not registered in repository");
+
+ private final String message;
+
+ private FrameworkError(String message) {
+ this.message = message;
+ }
+
+ public String getCode() {
+ return name();
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
Added: sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java?rev=1370814&view=auto
==============================================================================
--- sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java (added)
+++ sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java Wed Aug 8 15:41:15 2012
@@ -0,0 +1,87 @@
+/**
+ * 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.sqoop.framework;
+
+import org.apache.log4j.Logger;
+import org.apache.sqoop.common.SqoopException;
+import org.apache.sqoop.model.MForm;
+import org.apache.sqoop.model.MFramework;
+import org.apache.sqoop.model.MInput;
+import org.apache.sqoop.model.MStringInput;
+import org.apache.sqoop.repository.RepositoryManager;
+
+import static org.apache.sqoop.framework.FrameworkConstants.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Manager for Sqoop framework itself.
+ *
+ * All Sqoop internals (job execution engine, metadata) should be handled
+ * within this manager.
+ *
+ */
+public class FrameworkManager {
+
+ private static final Logger LOG = Logger.getLogger(FrameworkManager.class);
+
+ private static final List<MForm> CONNECTION_FORMS = new ArrayList<MForm>();
+ private static final List<MForm> JOB_FORMS = new ArrayList<MForm>();
+
+ private static MFramework mFramework;
+
+ static {
+ // Build the connection forms
+ List<MInput<?>> connFormInputs = new ArrayList<MInput<?>>();
+
+ MStringInput maxConnections = new MStringInput(
+ INPUT_CONN_MAX_SIMULTANEOUS_CONNECTIONS, false, (short) 10);
+ connFormInputs.add(maxConnections);
+
+ MForm connForm = new MForm(FORM_SECURITY, connFormInputs);
+
+ CONNECTION_FORMS.add(connForm);
+
+ // Build job forms
+ List<MInput<?>> jobFormInputs = new ArrayList<MInput<?>>();
+
+ MStringInput outputFormat = new MStringInput(INPUT_CONN_MAX_OUTPUT_FORMAT,
+ false, (short) 25);
+ jobFormInputs.add(outputFormat);
+
+ MForm jobForm = new MForm(FORM_OUTPUT, jobFormInputs);
+ JOB_FORMS.add(jobForm);
+ }
+
+ public static synchronized void initialize() {
+ LOG.trace("Begin connector manager initialization");
+
+ // Register framework metadata
+ mFramework = new MFramework(CONNECTION_FORMS, JOB_FORMS);
+ RepositoryManager.getRepository().registerFramework(mFramework);
+ if (!mFramework.hasPersistenceId()) {
+ throw new SqoopException(FrameworkError.FRAMEWORK_0000);
+ }
+ }
+
+ public static synchronized void destroy() {
+ LOG.trace("Begin framework manager destroy");
+ }
+
+}
Modified: sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java (original)
+++ sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java Wed Aug 8 15:41:15 2012
@@ -21,8 +21,8 @@ import java.sql.Connection;
import org.apache.log4j.Logger;
import org.apache.sqoop.common.SqoopException;
-import org.apache.sqoop.connector.ConnectorHandler;
import org.apache.sqoop.model.MConnector;
+import org.apache.sqoop.model.MFramework;
public class JdbcRepository implements Repository {
@@ -38,11 +38,17 @@ public class JdbcRepository implements R
this.repoContext = repoContext;
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public JdbcRepositoryTransaction getTransaction() {
return repoContext.getTransactionFactory().get();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public MConnector registerConnector(MConnector mConnector) {
MConnector result = null;
@@ -80,4 +86,43 @@ public class JdbcRepository implements R
return result;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void registerFramework(MFramework mFramework) {
+ MFramework result = null;
+ JdbcRepositoryTransaction tx = null;
+
+ try {
+ tx = getTransaction();
+ tx.begin();
+ Connection conn = tx.getConnection();
+ result = handler.findFramework(conn);
+ if (result == null) {
+ handler.registerFramework(mFramework, conn);
+ } else {
+ if (!result.equals(mFramework)) {
+ throw new SqoopException(RepositoryError.JDBCREPO_0014,
+ "given[" + mFramework + "] found[" + result + "]");
+ }
+ mFramework.setPersistenceId(result.getPersistenceId());
+ }
+ tx.commit();
+ } catch (Exception ex) {
+ if (tx != null) {
+ tx.rollback();
+ }
+ if (ex instanceof SqoopException) {
+ throw (SqoopException) ex;
+ }
+ throw new SqoopException(RepositoryError.JDBCREPO_0012,
+ mFramework.toString(), ex);
+ } finally {
+ if (tx != null) {
+ tx.close();
+ }
+ }
+ }
}
Modified: sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java (original)
+++ sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java Wed Aug 8 15:41:15 2012
@@ -20,18 +20,79 @@ package org.apache.sqoop.repository;
import java.sql.Connection;
import org.apache.sqoop.model.MConnector;
+import org.apache.sqoop.model.MFramework;
+/**
+ * Set of methods required from each JDBC based repository.
+ */
public interface JdbcRepositoryHandler {
+ /**
+ * Initialize JDBC based repository.
+ *
+ * @param repoContext Context for this instance
+ */
public void initialize(JdbcRepositoryContext repoContext);
+ /**
+ * Search for connector with given name in repository.
+ *
+ * And return corresponding metadata structure.
+ *
+ * @param shortName Connector unique name
+ * @param conn JDBC connection for querying repository.
+ * @return null if connector is not yet registered in repository or
+ * loaded representation.
+ */
public MConnector findConnector(String shortName, Connection conn);
+ /**
+ * Register given connector in repository.
+ *
+ * Save given connector data to the repository. Given connector should not be
+ * already registered or present in the repository.
+ *
+ * @param mc Connector that should be registered.
+ * @param conn JDBC connection for querying repository.
+ */
public void registerConnector(MConnector mc, Connection conn);
+ /**
+ * Search for framework metadata in the repository.
+ *
+ * @param conn JDBC connection for querying repository.
+ * @return null if framework metadata are not yet present in repository or
+ * loaded representation.
+ */
+ public MFramework findFramework(Connection conn);
+
+ /**
+ * Register framework metadata in repository.
+ *
+ * Save framework metadata into repository. Metadata should not be already
+ * registered or present in the repository.
+ *
+ * @param mf Framework metadata that should be registered.
+ * @param conn JDBC connection for querying repository.
+ */
+ public void registerFramework(MFramework mf, Connection conn);
+
+ /**
+ * Check if schema is already present in the repository.
+ *
+ * @return true if schema is already present or false if it's not
+ */
public boolean schemaExists();
+ /**
+ * Create required schema in repository.
+ */
public void createSchema();
+ /**
+ * Termination callback for repository.
+ *
+ * Should clean up all resources and commit all uncommitted data.
+ */
public void shutdown();
}
Modified: sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/Repository.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/Repository.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/Repository.java (original)
+++ sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/Repository.java Wed Aug 8 15:41:15 2012
@@ -18,6 +18,7 @@
package org.apache.sqoop.repository;
import org.apache.sqoop.model.MConnector;
+import org.apache.sqoop.model.MFramework;
/**
@@ -34,10 +35,24 @@ public interface Repository {
* already registered, its associated metadata is returned from the
* repository.
*
+ * Method will set persistent ID of given MConnector instance in case of a
+ * success.
+ *
* @param mConnector the connector metadata to be registered
* @return <tt>null</tt> if the connector was successfully registered or
* a instance of previously registered metadata with the same connector
* unique name.
*/
public MConnector registerConnector(MConnector mConnector);
+
+ /**
+ * Registers framework metadata in the repository. No more than one set of
+ * framework metadata structure is allowed.
+ *
+ * Method will set persistent ID of given MFramework instance in case of a
+ * success.
+ *
+ * @param mFramework Framework data that should be registered.
+ */
+ public void registerFramework(MFramework mFramework);
}
Modified: sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java (original)
+++ sqoop/branches/sqoop2/core/src/main/java/org/apache/sqoop/repository/RepositoryError.java Wed Aug 8 15:41:15 2012
@@ -73,12 +73,14 @@ public enum RepositoryError implements E
*/
JDBCREPO_0011("Attempt to reinitialize JDBC repository context"),
- /** The system was unable to register the connector in its repository. */
- JDBCREPO_0012("Failed to register connector in repository"),
+ /** The system was unable to register metadata in its repository. */
+ JDBCREPO_0012("Failure in repository metadata registration process."),
/** The system found a change in connector metadata that requires upgrade. */
- JDBCREPO_0013("Connector metadata changed - upgrade may be required");
+ JDBCREPO_0013("Connector metadata changed - upgrade may be required"),
+ /** The system found a change in framework metadata that requires upgrade. */
+ JDBCREPO_0014("Framework metadata changed - upgrade may be required");
private final String message;
Modified: sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java (original)
+++ sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoError.java Wed Aug 8 15:41:15 2012
@@ -33,8 +33,8 @@ public enum DerbyRepoError implements Er
/** The system was unable to run the specified query. */
DERBYREPO_0003("Unable to run specified query"),
- /** The system was unable to query the repository for connector metadata. */
- DERBYREPO_0004("Unable to retrieve connector metadata"),
+ /** The system was unable to query the repository for metadata. */
+ DERBYREPO_0004("Unable to retrieve metadata"),
/** The metadata repository contains more than one connector with same name */
DERBYREPO_0005("Invalid metadata state - multiple connectors with name"),
@@ -58,10 +58,10 @@ public enum DerbyRepoError implements Er
DERBYREPO_0010("The form retrieved does not match expteced position"),
/**
- * The system was not able to register connector metadata due to a
- * pre-assigned persistence identifier.
+ * The system was not able to register metadata due to a pre-assigned
+ * persistence identifier.
*/
- DERBYREPO_0011("Connector metadata cannot have preassigned persistence id"),
+ DERBYREPO_0011("Metadata cannot have preassigned persistence id"),
/**
* The system was unable to register connector metadata due to an unexpected
Modified: sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java (original)
+++ sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java Wed Aug 8 15:41:15 2012
@@ -18,11 +18,6 @@
package org.apache.sqoop.repository.derby;
import static org.apache.sqoop.repository.derby.DerbySchemaQuery.*;
-import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_CREATE_TABLE_SQ_CONNECTOR;
-import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_CREATE_TABLE_SQ_FORM;
-import static org.apache.sqoop.repository.derby.DerbySchemaQuery.QUERY_CREATE_TABLE_SQ_INPUT;
-import static org.apache.sqoop.repository.derby.DerbySchemaQuery.STMT_FETCH_BASE_CONNECTOR;
-import static org.apache.sqoop.repository.derby.DerbySchemaQuery.STMT_FETCH_FORM;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -30,6 +25,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
@@ -40,6 +36,7 @@ import org.apache.sqoop.common.SqoopExce
import org.apache.sqoop.model.MConnector;
import org.apache.sqoop.model.MForm;
import org.apache.sqoop.model.MFormType;
+import org.apache.sqoop.model.MFramework;
import org.apache.sqoop.model.MInput;
import org.apache.sqoop.model.MInputType;
import org.apache.sqoop.model.MMapInput;
@@ -48,6 +45,11 @@ import org.apache.sqoop.repository.JdbcR
import org.apache.sqoop.repository.JdbcRepositoryHandler;
import org.apache.sqoop.repository.JdbcRepositoryTransactionFactory;
+/**
+ * JDBC based repository handler for Derby database.
+ *
+ * Repository implementation for Derby database.
+ */
public class DerbyRepositoryHandler implements JdbcRepositoryHandler {
private static final Logger LOG =
@@ -62,11 +64,13 @@ public class DerbyRepositoryHandler impl
private static final String EMBEDDED_DERBY_DRIVER_CLASSNAME =
"org.apache.derby.jdbc.EmbeddedDriver";
-
private JdbcRepositoryContext repoContext;
private DataSource dataSource;
private JdbcRepositoryTransactionFactory txFactory;
+ /**
+ * {@inheritDoc}
+ */
@Override
public void registerConnector(MConnector mc, Connection conn) {
if (mc.hasPersistenceId()) {
@@ -139,64 +143,9 @@ public class DerbyRepositoryHandler impl
}
}
- private void registerForms(long connectorId, List<MForm> forms, String type,
- PreparedStatement baseFormStmt, PreparedStatement baseInputStmt)
- throws SQLException {
- short formIndex = 0;
- for (MForm form : forms) {
- baseFormStmt.setLong(1, connectorId);
- baseFormStmt.setString(2, form.getName());
- baseFormStmt.setString(3, type);
- baseFormStmt.setShort(4, formIndex++);
-
- int baseFormCount = baseFormStmt.executeUpdate();
- if (baseFormCount != 1) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0015,
- new Integer(baseFormCount).toString());
- }
- ResultSet rsetFormId = baseFormStmt.getGeneratedKeys();
- if (!rsetFormId.next()) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0016);
- }
-
- long formId = rsetFormId.getLong(1);
- form.setPersistenceId(formId);
-
- // Insert all the inputs
- List<MInput<?>> inputs = form.getInputs();
- registerFormInputs(formId, inputs, baseInputStmt);
- }
- }
-
- private void registerFormInputs(long formId, List<MInput<?>> inputs,
- PreparedStatement baseInputStmt) throws SQLException {
- short inputIndex = 0;
- for (MInput<?> input : inputs) {
- baseInputStmt.setString(1, input.getName());
- baseInputStmt.setLong(2, formId);
- baseInputStmt.setShort(3, inputIndex++);
- baseInputStmt.setString(4, input.getType().name());
- if (input.getType().equals(MInputType.STRING)) {
- MStringInput strInput = (MStringInput) input;
- baseInputStmt.setBoolean(5, strInput.isMasked());
- baseInputStmt.setShort(6, strInput.getMaxLength());
- }
- int baseInputCount = baseInputStmt.executeUpdate();
- if (baseInputCount != 1) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0017,
- new Integer(baseInputCount).toString());
- }
-
- ResultSet rsetInputId = baseInputStmt.getGeneratedKeys();
- if (!rsetInputId.next()) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0018);
- }
-
- long inputId = rsetInputId.getLong(1);
- input.setPersistenceId(inputId);
- }
- }
-
+ /**
+ * {@inheritDoc}
+ */
@Override
public synchronized void initialize(JdbcRepositoryContext ctx) {
repoContext = ctx;
@@ -205,6 +154,9 @@ public class DerbyRepositoryHandler impl
LOG.info("DerbyRepositoryHandler initialized.");
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public synchronized void shutdown() {
String driver = repoContext.getDriverClass();
@@ -244,6 +196,10 @@ public class DerbyRepositoryHandler impl
}
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public void createSchema() {
runQuery(QUERY_CREATE_SCHEMA_SQOOP);
runQuery(QUERY_CREATE_TABLE_SQ_CONNECTOR);
@@ -251,6 +207,10 @@ public class DerbyRepositoryHandler impl
runQuery(QUERY_CREATE_TABLE_SQ_INPUT);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public boolean schemaExists() {
Connection connection = null;
Statement stmt = null;
@@ -295,52 +255,9 @@ public class DerbyRepositoryHandler impl
return true;
}
-
- private void runQuery(String query) {
- Connection connection = null;
- Statement stmt = null;
- try {
- connection = dataSource.getConnection();
- stmt = connection.createStatement();
- if (stmt.execute(query)) {
- ResultSet rset = stmt.getResultSet();
- int count = 0;
- while (rset.next()) {
- count++;
- }
- LOG.info("QUERY(" + query + ") produced unused resultset with "
- + count + " rows");
- } else {
- int updateCount = stmt.getUpdateCount();
- LOG.info("QUERY(" + query + ") Update count: " + updateCount);
- }
- connection.commit();
- } catch (SQLException ex) {
- try {
- connection.rollback();
- } catch (SQLException ex2) {
- LOG.error("Unable to rollback transaction", ex2);
- }
- throw new SqoopException(DerbyRepoError.DERBYREPO_0003,
- query, ex);
- } finally {
- if (stmt != null) {
- try {
- stmt.close();
- } catch (SQLException ex) {
- LOG.error("Unable to close statement", ex);
- }
- if (connection != null) {
- try {
- connection.close();
- } catch (SQLException ex) {
- LOG.error("Unable to close connection", ex);
- }
- }
- }
- }
- }
-
+ /**
+ * {@inheritDoc}
+ */
@Override
public MConnector findConnector(String shortName, Connection conn) {
if (LOG.isDebugEnabled()) {
@@ -367,6 +284,13 @@ public class DerbyRepositoryHandler impl
List<MForm> connectionForms = new ArrayList<MForm>();
List<MForm> jobForms = new ArrayList<MForm>();
+ formFetchStmt = conn.prepareStatement(STMT_FETCH_FORM_CONNECTOR);
+ formFetchStmt.setLong(1, connectorId);
+ inputFetchStmt = conn.prepareStatement(STMT_FETCH_INPUT);
+
+ loadForms(shortName, formFetchStmt, inputFetchStmt,
+ connectionForms, jobForms);
+
mc = new MConnector(connectorName, connectorClassName,
connectionForms, jobForms);
mc.setPersistenceId(connectorId);
@@ -374,97 +298,114 @@ public class DerbyRepositoryHandler impl
if (rsetBaseConnector.next()) {
throw new SqoopException(DerbyRepoError.DERBYREPO_0005, shortName);
}
+ } catch (SQLException ex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0004, shortName, ex);
+ } finally {
+ if (baseConnectorFetchStmt != null) {
+ try {
+ baseConnectorFetchStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close base connector fetch statement", ex);
+ }
+ }
+ if (formFetchStmt != null) {
+ try {
+ formFetchStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close form fetch statement", ex);
+ }
+ }
+ if (inputFetchStmt != null) {
+ try {
+ inputFetchStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close input fetch statement", ex);
+ }
+ }
+ }
- formFetchStmt = conn.prepareStatement(STMT_FETCH_FORM);
- formFetchStmt.setLong(1, connectorId);
-
- inputFetchStmt = conn.prepareStatement(STMT_FETCH_INPUT);
+ LOG.debug("Looking up connector: " + shortName + ", found: " + mc);
+ return mc;
+ }
- ResultSet rsetForm = formFetchStmt.executeQuery();
- while (rsetForm.next()) {
- long formId = rsetForm.getLong(1);
- long formConnectorId = rsetForm.getLong(2);
- String formName = rsetForm.getString(3);
- String formType = rsetForm.getString(4);
- int formIndex = rsetForm.getInt(5);
- List<MInput<?>> formInputs = new ArrayList<MInput<?>>();
-
- MForm mf = new MForm(formName, formInputs);
- mf.setPersistenceId(formId);
-
- inputFetchStmt.setLong(1, formId);
-
- ResultSet rsetInput = inputFetchStmt.executeQuery();
- while (rsetInput.next()) {
- long inputId = rsetInput.getLong(1);
- String inputName = rsetInput.getString(2);
- long inputForm = rsetInput.getLong(3);
- short inputIndex = rsetInput.getShort(4);
- String inputType = rsetInput.getString(5);
- boolean inputStrMask = rsetInput.getBoolean(6);
- short inputStrLength = rsetInput.getShort(7);
-
- MInputType mit = MInputType.valueOf(inputType);
-
- MInput input = null;
- switch (mit) {
- case STRING:
- input = new MStringInput(inputName, inputStrMask, inputStrLength);
- break;
- case MAP:
- input = new MMapInput(inputName);
- break;
- default:
- throw new SqoopException(DerbyRepoError.DERBYREPO_0006,
- "input-" + inputName + ":" + inputId + ":"
- + "form-" + inputForm + ":" + mit.name());
- }
- input.setPersistenceId(inputId);
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void registerFramework(MFramework mf, Connection conn) {
+ if (mf.hasPersistenceId()) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0011,
+ "Framework metadata");
+ }
- if (mf.getInputs().size() != inputIndex) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0009,
- "form: " + mf + "; input: " + input);
- }
+ PreparedStatement baseFormStmt = null;
+ PreparedStatement baseInputStmt = null;
+ try {
+ baseFormStmt = conn.prepareStatement(STMT_INSERT_FORM_BASE,
+ Statement.RETURN_GENERATED_KEYS);
+ baseInputStmt = conn.prepareStatement(STMT_INSERT_INPUT_BASE,
+ Statement.RETURN_GENERATED_KEYS);
- mf.getInputs().add(input);
- }
+ // Insert connection forms
+ registerForms(null, mf.getConnectionForms(),
+ MFormType.CONNECTION.name(), baseFormStmt, baseInputStmt);
- if (mf.getInputs().size() == 0) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0008,
- "connector-" + formConnectorId + ":" + mf);
- }
+ registerForms(null, mf.getJobForms(),
+ MFormType.JOB.name(), baseFormStmt, baseInputStmt);
- MFormType mft = MFormType.valueOf(formType);
- switch (mft) {
- case CONNECTION:
- if (mc.getConnectionForms().size() != formIndex) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0010,
- "connector: " + mc + "; form: " + mf);
- }
- mc.getConnectionForms().add(mf);
- break;
- case JOB:
- if (mc.getConnectionForms().size() != formIndex) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0010,
- "connector: " + mc + "; form: " + mf);
- }
- mc.getJobForms().add(mf);
- break;
- default:
- throw new SqoopException(DerbyRepoError.DERBYREPO_0007,
- "connector-" + formConnectorId + ":" + mf);
- }
- }
+ // We're using hardcoded value for framework metadata as they are
+ // represented as NULL in the database.
+ mf.setPersistenceId(1);
} catch (SQLException ex) {
- throw new SqoopException(DerbyRepoError.DERBYREPO_0004, shortName, ex);
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0014,
+ mf.toString(), ex);
} finally {
- if (baseConnectorFetchStmt != null) {
+ if (baseFormStmt != null) {
try {
- baseConnectorFetchStmt.close();
+ baseFormStmt.close();
} catch (SQLException ex) {
- LOG.error("Unable to close base connector fetch statement", ex);
+ LOG.error("Unable to close base form statement", ex);
+ }
+ }
+ if (baseInputStmt != null) {
+ try {
+ baseInputStmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close base input statement", ex);
}
}
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public MFramework findFramework(Connection conn) {
+ LOG.debug("Looking up framework metadata");
+ MFramework mf = null;
+ PreparedStatement formFetchStmt = null;
+ PreparedStatement inputFetchStmt = null;
+ try {
+ List<MForm> connectionForms = new ArrayList<MForm>();
+ List<MForm> jobForms = new ArrayList<MForm>();
+
+ formFetchStmt = conn.prepareStatement(STMT_FETCH_FORM_FRAMEWORK);
+ inputFetchStmt = conn.prepareStatement(STMT_FETCH_INPUT);
+
+ loadForms("Framework metadata", formFetchStmt, inputFetchStmt,
+ connectionForms, jobForms);
+
+ mf = new MFramework(connectionForms, jobForms);
+
+ // We're using hardcoded value for framework metadata as they are
+ // represented as NULL in the database.
+ mf.setPersistenceId(1);
+
+ } catch (SQLException ex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0004,
+ "Framework metadata", ex);
+ } finally {
if (formFetchStmt != null) {
try {
formFetchStmt.close();
@@ -480,9 +421,247 @@ public class DerbyRepositoryHandler impl
}
}
}
- if (LOG.isDebugEnabled()) {
- LOG.debug("Looking up connector: " + shortName + ", found: " + mc);
+
+ LOG.debug("Looking up framework metadta found: " + mf);
+
+ // If there aren't any framework metadata
+ if(mf.getConnectionForms().size() == 0 && mf.getJobForms().size() == 0) {
+ return null;
+ }
+
+ // Returned loaded framework metadata
+ return mf;
+ }
+
+ /**
+ * Register forms in derby database.
+ *
+ * Use given prepared statements to create entire form structure in database.
+ *
+ * @param connectorId
+ * @param forms
+ * @param type
+ * @param baseFormStmt
+ * @param baseInputStmt
+ * @throws SQLException
+ */
+ private void registerForms(Long connectorId, List<MForm> forms, String type,
+ PreparedStatement baseFormStmt, PreparedStatement baseInputStmt)
+ throws SQLException {
+ short formIndex = 0;
+ for (MForm form : forms) {
+ if(connectorId == null) {
+ baseFormStmt.setNull(1, Types.BIGINT);
+ } else {
+ baseFormStmt.setLong(1, connectorId);
+ }
+ baseFormStmt.setString(2, form.getName());
+ baseFormStmt.setString(3, type);
+ baseFormStmt.setShort(4, formIndex++);
+
+ int baseFormCount = baseFormStmt.executeUpdate();
+ if (baseFormCount != 1) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0015,
+ new Integer(baseFormCount).toString());
+ }
+ ResultSet rsetFormId = baseFormStmt.getGeneratedKeys();
+ if (!rsetFormId.next()) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0016);
+ }
+
+ long formId = rsetFormId.getLong(1);
+ form.setPersistenceId(formId);
+
+ // Insert all the inputs
+ List<MInput<?>> inputs = form.getInputs();
+ registerFormInputs(formId, inputs, baseInputStmt);
+ }
+ }
+
+ /**
+ * Save given inputs to the database.
+ *
+ * Use given prepare statement to save all inputs into repository.
+ *
+ * @param formId Identifier for corresponding form
+ * @param inputs List of inputs that needs to be saved
+ * @param baseInputStmt Statement that we can utilize
+ * @throws SQLException In case of any failure on Derby side
+ */
+ private void registerFormInputs(long formId, List<MInput<?>> inputs,
+ PreparedStatement baseInputStmt) throws SQLException {
+ short inputIndex = 0;
+ for (MInput<?> input : inputs) {
+ baseInputStmt.setString(1, input.getName());
+ baseInputStmt.setLong(2, formId);
+ baseInputStmt.setShort(3, inputIndex++);
+ baseInputStmt.setString(4, input.getType().name());
+ if (input.getType().equals(MInputType.STRING)) {
+ MStringInput strInput = (MStringInput) input;
+ baseInputStmt.setBoolean(5, strInput.isMasked());
+ baseInputStmt.setShort(6, strInput.getMaxLength());
+ }
+ int baseInputCount = baseInputStmt.executeUpdate();
+ if (baseInputCount != 1) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0017,
+ new Integer(baseInputCount).toString());
+ }
+
+ ResultSet rsetInputId = baseInputStmt.getGeneratedKeys();
+ if (!rsetInputId.next()) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0018);
+ }
+
+ long inputId = rsetInputId.getLong(1);
+ input.setPersistenceId(inputId);
+ }
+ }
+
+ /**
+ * Execute given query on database.
+ *
+ * Passed query will be executed in it's own transaction
+ *
+ * @param query Query that should be executed
+ */
+ private void runQuery(String query) {
+ Connection connection = null;
+ Statement stmt = null;
+ try {
+ connection = dataSource.getConnection();
+ stmt = connection.createStatement();
+ if (stmt.execute(query)) {
+ ResultSet rset = stmt.getResultSet();
+ int count = 0;
+ while (rset.next()) {
+ count++;
+ }
+ LOG.info("QUERY(" + query + ") produced unused resultset with "
+ + count + " rows");
+ } else {
+ int updateCount = stmt.getUpdateCount();
+ LOG.info("QUERY(" + query + ") Update count: " + updateCount);
+ }
+ connection.commit();
+ } catch (SQLException ex) {
+ try {
+ connection.rollback();
+ } catch (SQLException ex2) {
+ LOG.error("Unable to rollback transaction", ex2);
+ }
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0003,
+ query, ex);
+ } finally {
+ if (stmt != null) {
+ try {
+ stmt.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close statement", ex);
+ }
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException ex) {
+ LOG.error("Unable to close connection", ex);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Load forms and corresponding inputs from Derby database.
+ *
+ * Use given prepared statements to load all forms and corresponding inputs
+ * from Derby.
+ *
+ * @param connectorName Connector name for purpose of printing errors
+ * @param formFetchStmt Prepared statement for fetching forms
+ * @param inputFetchStmt Prepare statement for fetching inputs
+ * @param connectionForms List of connection forms that will be filled up
+ * @param jobForms List of job forms that will be filled up
+ * @throws SQLException In case of any failure on Derby side
+ */
+ public void loadForms(String connectorName,
+ PreparedStatement formFetchStmt,
+ PreparedStatement inputFetchStmt,
+ List<MForm> connectionForms,
+ List<MForm> jobForms) throws SQLException {
+
+ ResultSet rsetForm = formFetchStmt.executeQuery();
+ while (rsetForm.next()) {
+ long formId = rsetForm.getLong(1);
+ long formConnectorId = rsetForm.getLong(2);
+ String formName = rsetForm.getString(3);
+ String formType = rsetForm.getString(4);
+ int formIndex = rsetForm.getInt(5);
+ List<MInput<?>> formInputs = new ArrayList<MInput<?>>();
+
+ MForm mf = new MForm(formName, formInputs);
+ mf.setPersistenceId(formId);
+
+ inputFetchStmt.setLong(1, formId);
+
+ ResultSet rsetInput = inputFetchStmt.executeQuery();
+ while (rsetInput.next()) {
+ long inputId = rsetInput.getLong(1);
+ String inputName = rsetInput.getString(2);
+ long inputForm = rsetInput.getLong(3);
+ short inputIndex = rsetInput.getShort(4);
+ String inputType = rsetInput.getString(5);
+ boolean inputStrMask = rsetInput.getBoolean(6);
+ short inputStrLength = rsetInput.getShort(7);
+
+ MInputType mit = MInputType.valueOf(inputType);
+
+ MInput input = null;
+ switch (mit) {
+ case STRING:
+ input = new MStringInput(inputName, inputStrMask, inputStrLength);
+ break;
+ case MAP:
+ input = new MMapInput(inputName);
+ break;
+ default:
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0006,
+ "input-" + inputName + ":" + inputId + ":"
+ + "form-" + inputForm + ":" + mit.name());
+ }
+ input.setPersistenceId(inputId);
+
+ if (mf.getInputs().size() != inputIndex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0009,
+ "form: " + mf + "; input: " + input);
+ }
+
+ mf.getInputs().add(input);
+ }
+
+ if (mf.getInputs().size() == 0) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0008,
+ "connector-" + formConnectorId + ":" + mf);
+ }
+
+ MFormType mft = MFormType.valueOf(formType);
+ switch (mft) {
+ case CONNECTION:
+ if (connectionForms.size() != formIndex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0010,
+ "connector: " + connectorName + "; form: " + mf);
+ }
+ connectionForms.add(mf);
+ break;
+ case JOB:
+ if (jobForms.size() != formIndex) {
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0010,
+ "connector: " + connectorName + "; form: " + mf);
+ }
+ jobForms.add(mf);
+ break;
+ default:
+ throw new SqoopException(DerbyRepoError.DERBYREPO_0007,
+ "connector-" + formConnectorId + ":" + mf);
+ }
}
- return mc;
}
}
Modified: sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java (original)
+++ sqoop/branches/sqoop2/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java Wed Aug 8 15:41:15 2012
@@ -42,7 +42,7 @@ import static org.apache.sqoop.repositor
* | SQ_FORM |
* +-----------------------------+
* | SQF_ID: BIGINT PK AUTO-GEN |
- * | SQF_CONNECTOR: BIGINT | FK SQ_CONNECTOR(SQC_ID)
+ * | SQF_CONNECTOR: BIGINT | FK SQ_CONNECTOR(SQC_ID),NULL for framework
* | SQF_NAME: VARCHAR(64) |
* | SQF_TYPE: VARCHAR(32) | "CONNECTION"|"JOB"
* | SQF_INDEX: SMALLINT |
@@ -108,12 +108,19 @@ public final class DerbySchemaQuery {
// DML: Fetch all forms for a given connector
- public static final String STMT_FETCH_FORM =
+ public static final String STMT_FETCH_FORM_CONNECTOR =
"SELECT " + COLUMN_SQF_ID + ", " + COLUMN_SQF_CONNECTOR + ", "
+ COLUMN_SQF_NAME + ", " + COLUMN_SQF_TYPE + ", " + COLUMN_SQF_INDEX
+ " FROM " + TABLE_SQ_FORM + " WHERE " + COLUMN_SQF_CONNECTOR
+ " = ? ORDER BY " + COLUMN_SQF_INDEX;
+ // DML: Fetch all framework forms
+ public static final String STMT_FETCH_FORM_FRAMEWORK =
+ "SELECT " + COLUMN_SQF_ID + ", " + COLUMN_SQF_CONNECTOR + ", "
+ + COLUMN_SQF_NAME + ", " + COLUMN_SQF_TYPE + ", " + COLUMN_SQF_INDEX
+ + " FROM " + TABLE_SQ_FORM + " WHERE " + COLUMN_SQF_CONNECTOR
+ + " IS NULL ORDER BY " + COLUMN_SQF_INDEX;
+
// DML: Fetch inputs for a given form
public static final String STMT_FETCH_INPUT =
"SELECT " + COLUMN_SQI_ID + ", " + COLUMN_SQI_NAME + ", "
Modified: sqoop/branches/sqoop2/server/src/main/java/org/apache/sqoop/server/ServerInitializer.java
URL: http://svn.apache.org/viewvc/sqoop/branches/sqoop2/server/src/main/java/org/apache/sqoop/server/ServerInitializer.java?rev=1370814&r1=1370813&r2=1370814&view=diff
==============================================================================
--- sqoop/branches/sqoop2/server/src/main/java/org/apache/sqoop/server/ServerInitializer.java (original)
+++ sqoop/branches/sqoop2/server/src/main/java/org/apache/sqoop/server/ServerInitializer.java Wed Aug 8 15:41:15 2012
@@ -24,6 +24,7 @@ import org.apache.log4j.Logger;
import org.apache.sqoop.common.SqoopException;
import org.apache.sqoop.connector.ConnectorManager;
import org.apache.sqoop.core.SqoopConfiguration;
+import org.apache.sqoop.framework.FrameworkManager;
import org.apache.sqoop.repository.RepositoryManager;
@@ -37,6 +38,7 @@ public class ServerInitializer implement
Logger.getLogger(ServerInitializer.class);
public void contextDestroyed(ServletContextEvent arg0) {
+ FrameworkManager.destroy();
ConnectorManager.destroy();
RepositoryManager.destroy();
SqoopConfiguration.destroy();
@@ -47,6 +49,7 @@ public class ServerInitializer implement
SqoopConfiguration.initialize();
RepositoryManager.initialize();
ConnectorManager.initialize();
+ FrameworkManager.initialize();
} catch (RuntimeException ex) {
LOG.error("Server startup failure", ex);
throw ex;