You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by se...@apache.org on 2015/07/28 18:40:20 UTC
incubator-ignite git commit: IGNITE-1155 Creating API on agent to
request metadata.
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-1155_1 1e3c77f65 -> 3762de370
IGNITE-1155 Creating API on agent to request metadata.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/3762de37
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/3762de37
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/3762de37
Branch: refs/heads/ignite-1155_1
Commit: 3762de370e710ca792e300ba075ebdfe5d1d44c7
Parents: 1e3c77f
Author: sevdokimov <se...@gridgain.com>
Authored: Tue Jul 28 19:39:48 2015 +0300
Committer: sevdokimov <se...@gridgain.com>
Committed: Tue Jul 28 19:39:48 2015 +0300
----------------------------------------------------------------------
modules/control-center-agent/pom.xml | 8 +-
.../java/org/apache/ignite/agent/Agent.java | 23 ++++
.../org/apache/ignite/agent/AgentSocket.java | 40 ++++++-
.../agent/messages/DbMetadataRequest.java | 110 +++++++++++++++++++
.../agent/messages/DbMetadataResponse.java | 61 ++++++++++
modules/schema-import-db/pom.xml | 7 --
.../apache/ignite/schema/parser/DBReader.java | 61 +++++++++-
.../schema/parser/DatabaseMetadataParser.java | 2 +-
.../ignite/schema/ui/SchemaImportApp.java | 53 +--------
pom.xml | 1 +
10 files changed, 298 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/control-center-agent/pom.xml
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/pom.xml b/modules/control-center-agent/pom.xml
index 59bc595..c40b4756 100644
--- a/modules/control-center-agent/pom.xml
+++ b/modules/control-center-agent/pom.xml
@@ -31,7 +31,7 @@
</parent>
<artifactId>control-center-agent</artifactId>
- <version>1.2.1-SNAPSHOT</version>
+ <version>1.4.1-SNAPSHOT</version>
<properties>
<jetty.version>9.2.12.v20150709</jetty.version>
@@ -61,6 +61,12 @@
<artifactId>httpclient</artifactId>
<version>4.5</version>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.ignite</groupId>
+ <artifactId>ignite-schema-import-db</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
index ba3a9fd..306e21a 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/Agent.java
@@ -25,10 +25,12 @@ import org.apache.http.client.utils.*;
import org.apache.http.entity.*;
import org.apache.http.impl.client.*;
import org.apache.ignite.agent.messages.*;
+import org.apache.ignite.schema.parser.*;
import java.io.*;
import java.net.*;
import java.nio.charset.*;
+import java.sql.*;
import java.util.*;
/**
@@ -138,4 +140,25 @@ public class Agent {
return res;
}
}
+
+ /**
+ * @param req Request.
+ */
+ public DbMetadataResponse dbMetadataRequest(DbMetadataRequest req) {
+ DbMetadataResponse res = new DbMetadataResponse();
+
+ try {
+ Connection conn = DBReader.getInstance().connect(req.getJdbcDriverJarPath(), req.getJdbcDriverClass(),
+ req.getJdbcUrl(), req.getJdbcInfo());
+
+ Collection<DbTable> tbls = DBReader.getInstance().extractMetadata(conn, req.isTablesOnly());
+
+ res.setTables(tbls);
+ }
+ catch (SQLException e) {
+ res.setError(e.getMessage());
+ }
+
+ return res;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
index ec363b4..3c1c59a 100644
--- a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/AgentSocket.java
@@ -44,6 +44,9 @@ public class AgentSocket {
/** */
private final Agent agent;
+ /** */
+ private Session ses;
+
/**
* @param cfg Config.
*/
@@ -70,6 +73,8 @@ public class AgentSocket {
public void onConnect(Session ses) {
log.log(Level.INFO, "Authentication...");
+ this.ses = ses;
+
AuthMessage authMsg = new AuthMessage(cfg.getLogin(), cfg.getPassword());
try {
@@ -80,6 +85,29 @@ public class AgentSocket {
}
/**
+ * @param msg Message.
+ */
+ public boolean send(AbstractMessage msg) {
+ return send(MessageFactory.toString(msg));
+ }
+
+ /**
+ * @param msg Message.
+ */
+ public boolean send(String msg) {
+ try {
+ ses.getRemote().sendString(msg);
+
+ return true;
+ }
+ catch (IOException e) {
+ log.log(Level.SEVERE, "Failed to send message to Control Center");
+
+ return false;
+ }
+ }
+
+ /**
* @param ses Session.
* @param error Error.
*/
@@ -126,12 +154,12 @@ public class AgentSocket {
restRes.setRequestId(((RestRequest)m).getId());
- try {
- ses.getRemote().sendString(MessageFactory.toString(restRes));
- }
- catch (IOException e) {
- e.printStackTrace();
- }
+ send(MessageFactory.toString(restRes));
+ }
+ else if (m instanceof DbMetadataRequest) {
+ DbMetadataResponse resp = agent.dbMetadataRequest((DbMetadataRequest)m);
+
+ send(resp);
}
else
log.log(Level.SEVERE, "Unknown message: " + msg);
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataRequest.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataRequest.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataRequest.java
new file mode 100644
index 0000000..82e83e4
--- /dev/null
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataRequest.java
@@ -0,0 +1,110 @@
+/*
+ * 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.ignite.agent.messages;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class DbMetadataRequest extends AbstractMessage {
+ /** */
+ private String jdbcDriverJarPath;
+
+ /** */
+ private String jdbcDriverClass;
+
+ /** */
+ private String jdbcUrl;
+
+ /** */
+ private Properties jdbcInfo;
+
+ /** */
+ private boolean tablesOnly;
+
+ /**
+ * @return JDBC driver class name.
+ */
+ public String getJdbcDriverClass() {
+ return jdbcDriverClass;
+ }
+
+ /**
+ * @param jdbcDriverCls Jdbc driver class.
+ */
+ public void setJdbcDriverClass(String jdbcDriverCls) {
+ this.jdbcDriverClass = jdbcDriverCls;
+ }
+
+ /**
+ *
+ */
+ public String getJdbcUrl() {
+ return jdbcUrl;
+ }
+
+ /**
+ * @param jdbcUrl Jdbc url.
+ */
+ public void setJdbcUrl(String jdbcUrl) {
+ this.jdbcUrl = jdbcUrl;
+ }
+
+ /**
+ *
+ */
+ public Properties getJdbcInfo() {
+ return jdbcInfo;
+ }
+
+ /**
+ * @param jdbcInfo Jdbc info.
+ */
+ public void setJdbcInfo(Properties jdbcInfo) {
+ this.jdbcInfo = jdbcInfo;
+ }
+
+ /**
+ *
+ */
+ public String getJdbcDriverJarPath() {
+ return jdbcDriverJarPath;
+ }
+
+ /**
+ * @param jdbcDriverJarPath Jdbc drv jar path.
+ */
+ public void setJdbcDriverJarPath(String jdbcDriverJarPath) {
+ this.jdbcDriverJarPath = jdbcDriverJarPath;
+ }
+
+ /**
+ * @return Tables only flag.
+ */
+ public boolean isTablesOnly() {
+ return tablesOnly;
+ }
+
+ /**
+ * @param tblsOnly Tables only.
+ */
+ public void setTablesOnly(boolean tblsOnly) {
+ this.tablesOnly = tblsOnly;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataResponse.java
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataResponse.java b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataResponse.java
new file mode 100644
index 0000000..d6eec9d
--- /dev/null
+++ b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/messages/DbMetadataResponse.java
@@ -0,0 +1,61 @@
+/*
+ * 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.ignite.agent.messages;
+
+import org.apache.ignite.schema.parser.*;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class DbMetadataResponse extends AbstractMessage {
+ /** */
+ private String error;
+
+ /** */
+ private Collection<DbTable> tables;
+
+ /**
+ *
+ */
+ public String getError() {
+ return error;
+ }
+
+ /**
+ * @param error Error.
+ */
+ public void setError(String error) {
+ this.error = error;
+ }
+
+ /**
+ *
+ */
+ public Collection<DbTable> getTables() {
+ return tables;
+ }
+
+ /**
+ * @param tbls Tables.
+ */
+ public void setTables(Collection<DbTable> tbls) {
+ this.tables = tbls;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/schema-import-db/pom.xml
----------------------------------------------------------------------
diff --git a/modules/schema-import-db/pom.xml b/modules/schema-import-db/pom.xml
index c0bfc8d..81b0a65 100644
--- a/modules/schema-import-db/pom.xml
+++ b/modules/schema-import-db/pom.xml
@@ -34,11 +34,4 @@
<artifactId>ignite-schema-import-db</artifactId>
<version>1.4.1-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-core</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/DBReader.java
----------------------------------------------------------------------
diff --git a/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/DBReader.java b/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/DBReader.java
index 5c4466e..d220b14 100644
--- a/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/DBReader.java
+++ b/modules/schema-import-db/src/main/java/org/apache/ignite/schema/parser/DBReader.java
@@ -19,6 +19,8 @@ package org.apache.ignite.schema.parser;
import org.apache.ignite.schema.parser.dialect.*;
+import java.io.*;
+import java.net.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
@@ -30,6 +32,12 @@ public class DBReader {
/** Logger. */
private static final Logger log = Logger.getLogger(DBReader.class.getName());
+ /** */
+ private static final DBReader INSTANCE = new DBReader();
+
+ /** */
+ private final Map<String, Driver> drivers = new HashMap<>();
+
/**
* Default constructor.
*/
@@ -43,7 +51,7 @@ public class DBReader {
* @param conn Connection.
* @param tblsOnly Tables only flag.
*/
- public static Collection<DbTable> extractMetadata(Connection conn, boolean tblsOnly) throws SQLException {
+ public Collection<DbTable> extractMetadata(Connection conn, boolean tblsOnly) throws SQLException {
DatabaseMetadataDialect dialect;
try {
@@ -65,4 +73,55 @@ public class DBReader {
return dialect.tables(conn, tblsOnly);
}
+ /**
+ * Connect to database.
+ *
+ * @param jdbcDrvJarPath Path to JDBC driver.
+ * @param jdbcDrvCls JDBC class name.
+ * @param jdbcUrl JDBC connection URL.
+ * @param jdbcInfo Connection properties.
+ * @return Connection to database.
+ * @throws SQLException if connection failed.
+ */
+ public Connection connect(String jdbcDrvJarPath, String jdbcDrvCls, String jdbcUrl, Properties jdbcInfo)
+ throws SQLException {
+ Driver drv = drivers.get(jdbcDrvCls);
+
+ if (drv == null) {
+ if (jdbcDrvJarPath.isEmpty())
+ throw new IllegalStateException("Driver jar file name is not specified.");
+
+ File drvJar = new File(jdbcDrvJarPath);
+
+ if (!drvJar.exists())
+ throw new IllegalStateException("Driver jar file is not found.");
+
+ try {
+ URL u = new URL("jar:" + drvJar.toURI() + "!/");
+
+ URLClassLoader ucl = URLClassLoader.newInstance(new URL[] {u});
+
+ drv = (Driver)Class.forName(jdbcDrvCls, true, ucl).newInstance();
+
+ drivers.put(jdbcDrvCls, drv);
+ }
+ catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ Connection conn = drv.connect(jdbcUrl, jdbcInfo);
+
+ if (conn == null)
+ throw new IllegalStateException("Connection was not established (JDBC driver returned null value).");
+
+ return conn;
+ }
+
+ /**
+ * @return Instance.
+ */
+ public static DBReader getInstance() {
+ return INSTANCE;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/DatabaseMetadataParser.java
----------------------------------------------------------------------
diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/DatabaseMetadataParser.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/DatabaseMetadataParser.java
index 54dc3ee..22cb5ba 100644
--- a/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/DatabaseMetadataParser.java
+++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/DatabaseMetadataParser.java
@@ -44,7 +44,7 @@ public class DatabaseMetadataParser {
Map<String, Collection<PojoDescriptor>> childrens = new HashMap<>();
- for (DbTable tbl : DBReader.extractMetadata(conn, tblsOnly)) {
+ for (DbTable tbl : DBReader.getInstance().extractMetadata(conn, tblsOnly)) {
String schema = tbl.schema();
PojoDescriptor parent = parents.get(schema);
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java
----------------------------------------------------------------------
diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java
index 7b9c220..d85922a 100644
--- a/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java
+++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java
@@ -23,7 +23,6 @@ import javafx.collections.*;
import javafx.concurrent.*;
import javafx.event.*;
import javafx.geometry.*;
-import javafx.geometry.Insets;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
@@ -35,10 +34,8 @@ import org.apache.ignite.schema.model.*;
import org.apache.ignite.schema.parser.*;
import java.io.*;
-import java.net.*;
import java.sql.*;
import java.util.*;
-import java.util.List;
import java.util.concurrent.*;
import java.util.logging.*;
@@ -251,9 +248,6 @@ public class SchemaImportApp extends Application {
/** Currently selected POJO. */
private PojoDescriptor curPojo;
- /** */
- private final Map<String, Driver> drivers = new HashMap<>();
-
/** Application preferences. */
private final Properties prefs = new Properties();
@@ -348,7 +342,7 @@ public class SchemaImportApp extends Application {
@Override protected Void call() throws Exception {
long started = System.currentTimeMillis();
- try (Connection conn = connect(jdbcDrvJarPath, jdbcDrvCls, jdbcUrl, jdbcInfo)) {
+ try (Connection conn = DBReader.getInstance().connect(jdbcDrvJarPath, jdbcDrvCls, jdbcUrl, jdbcInfo)) {
pojos = DatabaseMetadataParser.parse(conn, tblsOnly);
}
@@ -653,51 +647,6 @@ public class SchemaImportApp extends Application {
}
/**
- * Connect to database.
- *
- * @param jdbcDrvJarPath Path to JDBC driver.
- * @param jdbcDrvCls JDBC class name.
- * @param jdbcUrl JDBC connection URL.
- * @param jdbcInfo Connection properties.
- * @return Connection to database.
- * @throws SQLException if connection failed.
- */
- private Connection connect(String jdbcDrvJarPath, String jdbcDrvCls, String jdbcUrl, Properties jdbcInfo)
- throws SQLException {
- Driver drv = drivers.get(jdbcDrvCls);
-
- if (drv == null) {
- if (jdbcDrvJarPath.isEmpty())
- throw new IllegalStateException("Driver jar file name is not specified.");
-
- File drvJar = new File(jdbcDrvJarPath);
-
- if (!drvJar.exists())
- throw new IllegalStateException("Driver jar file is not found.");
-
- try {
- URL u = new URL("jar:" + drvJar.toURI() + "!/");
-
- URLClassLoader ucl = URLClassLoader.newInstance(new URL[] {u});
-
- drv = (Driver)Class.forName(jdbcDrvCls, true, ucl).newInstance();
-
- drivers.put(jdbcDrvCls, drv);
- }
- catch (Exception e) {
- throw new IllegalStateException(e);
- }
- }
-
- Connection conn = drv.connect(jdbcUrl, jdbcInfo);
-
- if (conn == null)
- throw new IllegalStateException("Connection was not established (JDBC driver returned null value).");
-
- return conn;
- }
-
- /**
* Create connection pane with controls.
*
* @return Pane with connection controls.
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3762de37/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 0b9ac0a..4a19938 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,6 +76,7 @@
<module>modules/kafka</module>
<module>modules/yarn</module>
<module>modules/json</module>
+ <module>modules/schema-import-db</module>
</modules>
<profiles>