Repository: karaf
Updated Branches:
refs/heads/karaf-3.0.x 662d01b89 -> 0c7e0f476
[KARAF-3959]make jdbc:create work better with MS SQL Server
(cherry picked from commit 7e332da649329cb33df76346d0b3527182833053)
Conflicts:
jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/0c7e0f47
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/0c7e0f47
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/0c7e0f47
Branch: refs/heads/karaf-3.0.x
Commit: 0c7e0f476c0db701722d9b7046ac8b071add9b16
Parents: 662d01b
Author: Freeman Fang <[email protected]>
Authored: Wed Aug 26 14:28:56 2015 +0800
Committer: Freeman Fang <[email protected]>
Committed: Wed Aug 26 15:41:02 2015 +0800
----------------------------------------------------------------------
.../karaf/jdbc/command/CreateCommand.java | 15 +++++++++-
.../java/org/apache/karaf/jdbc/JdbcMBean.java | 17 +++++++++++
.../java/org/apache/karaf/jdbc/JdbcService.java | 19 +++++++++++++
.../karaf/jdbc/internal/JdbcMBeanImpl.java | 8 ++++++
.../karaf/jdbc/internal/JdbcServiceImpl.java | 30 ++++++++++++++++++++
.../karaf/jdbc/internal/datasource-mssql.xml | 5 ++--
6 files changed, 91 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/0c7e0f47/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
----------------------------------------------------------------------
diff --git
a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
index a4d0557..f0bb4d0 100644
---
a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
+++
b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
@@ -43,12 +43,25 @@ public class CreateCommand extends JdbcCommandSupport {
@Option(name = "-p", aliases = { "--password" }, description = "The
database password", required = false, multiValued = false)
String password;
+
+ @Option(name = "-sn", aliases = { "--servername" }, description = "The
server name of the database machine, applicable for MSSQL only", required =
false, multiValued = false)
+ String servername;
+
+ @Option(name = "-dbn", aliases = { "--databasename" }, description = "The
database name, applicable for MSSQL only", required = false, multiValued =
false)
+ String databasename;
+
+ @Option(name = "-ptn", aliases = { "--portnumber" }, description = "The
portnumber for MS SQL SERVER, applicable for MSSQL only", required = false,
multiValued = false)
+ String portnumber = "1433";
@Option(name = "-i", aliases = { "--install-bundles" }, description = "Try
to install the bundles providing the JDBC driver", required = false,
multiValued = false)
boolean installBundles = false;
public Object doExecute() throws Exception {
- this.getJdbcService().create(name, type, driver, version, url,
username, password, installBundles);
+ if (type.equals("MSSQL")) {
+ this.getJdbcService().create(name, type, driver, version,
username, password, servername, databasename, portnumber, installBundles);
+ } else {
+ this.getJdbcService().create(name, type, driver, version, url,
username, password, installBundles);
+ }
return null;
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/0c7e0f47/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcMBean.java
----------------------------------------------------------------------
diff --git a/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcMBean.java
b/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcMBean.java
index 26165c8..c7a977b 100644
--- a/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcMBean.java
+++ b/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcMBean.java
@@ -34,6 +34,23 @@ public interface JdbcMBean {
TabularData getDatasources() throws MBeanException;
/**
+ * Create a JDBC datasource for MSSQL.
+ *
+ * @param name the JDBC datasource name.
+ * @param type the JDBC datasource type (generic, MySQL, MSSQL, Oracle,
Postgres, H2, HSQL, Derby).
+ * @param driver the JDBC datasource driver class name (can be null).
+ * @param version the target JDBC driver version (can be null).
+ * @param user the database username.
+ * @param password the database password.
+ * @param servername the database servername.
+ * @param databasename the database name.
+ * @param portnumber the database port number.
+ * @param installBundles true to install the bundles providing the JDBC
driver, false to not install.
+ * @throws MBeanException
+ */
+ void create(String name, String type, String driver, String version,
String user, String password, String servername, String databasename, String
portnumber,boolean installBundles) throws MBeanException;
+
+ /**
* Create a JDBC datasource.
*
* @param name the JDBC datasource name.
http://git-wip-us.apache.org/repos/asf/karaf/blob/0c7e0f47/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcService.java
----------------------------------------------------------------------
diff --git a/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcService.java
b/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcService.java
index b99c95e..c77e3f0 100644
--- a/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcService.java
+++ b/jdbc/core/src/main/java/org/apache/karaf/jdbc/JdbcService.java
@@ -20,6 +20,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.management.MBeanException;
+
/**
* JDBC Service.
*/
@@ -38,6 +40,23 @@ public interface JdbcService {
* @param tryToInstallBundles true to try to automatically install the
required bundles (JDBC driver, etc) when possible, false else.
*/
void create(String name, String type, String driverClassName, String
version, String url, String user, String password, boolean tryToInstallBundles)
throws Exception;
+
+ /**
+ * Create a JDBC datasource for MSSQL.
+ *
+ * @param name the JDBC datasource name.
+ * @param type the JDBC datasource type (generic, MySQL, MSSQL, Oracle,
Postgres, H2, HSQL, Derby).
+ * @param driver the JDBC datasource driver class name (can be null).
+ * @param version the target JDBC driver version (can be null).
+ * @param user the database username.
+ * @param password the database password.
+ * @param servername the database servername.
+ * @param databasename the database name.
+ * @param portnumber the database port number.
+ * @param installBundles true to install the bundles providing the JDBC
driver, false to not install.
+ * @throws MBeanException
+ */
+ void create(String name, String type, String driver, String version,
String user, String password, String servername, String databasename, String
portnumber,boolean installBundles) throws Exception;
/**
* Delete a JDBC datasource identified by a name.
http://git-wip-us.apache.org/repos/asf/karaf/blob/0c7e0f47/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcMBeanImpl.java
----------------------------------------------------------------------
diff --git
a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcMBeanImpl.java
b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcMBeanImpl.java
index 9f294c3..1a86695 100644
--- a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcMBeanImpl.java
+++ b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcMBeanImpl.java
@@ -70,6 +70,14 @@ public class JdbcMBeanImpl implements JdbcMBean {
throw new MBeanException(null, e.getMessage());
}
}
+
+ public void create(String name, String type, String driver, String
version, String user, String password, String servername, String databasename,
String portnumber, boolean installBundles) throws MBeanException {
+ try {
+ jdbcService.create(name, type, driver, version, user, password,
servername, databasename, portnumber, installBundles);
+ } catch (Exception e) {
+ throw new MBeanException(null, e.getMessage());
+ }
+ }
@Override
public void delete(String name) throws MBeanException {
http://git-wip-us.apache.org/repos/asf/karaf/blob/0c7e0f47/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
----------------------------------------------------------------------
diff --git
a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
index b9ea038..de9ec83 100644
---
a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
+++
b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
@@ -107,6 +107,36 @@ public class JdbcServiceImpl implements JdbcService {
dbType.copyDataSourceFile(outFile, properties);
}
+ public void create(String name,
+ String type,
+ String driverClassName,
+ String version,
+ String user,
+ String password,
+ String servername,
+ String databasename,
+ String portnumber,
+ boolean tryToInstallBundles) throws Exception {
+ if (tryToInstallBundles) {
+ TYPES.valueOf(type.toUpperCase()).installBundle(bundleContext,
version);
+ }
+
+ File karafBase = new File(System.getProperty("karaf.base"));
+ File deployFolder = new File(karafBase, "deploy");
+ File outFile = new File(deployFolder, "datasource-" + name + ".xml");
+
+ HashMap<String, String> properties = new HashMap<String, String>();
+ properties.put("${name}", name);
+ properties.put("${driver}", driverClassName);
+ properties.put("${user}", user);
+ properties.put("${password}", password);
+ properties.put("${servername}", servername);
+ properties.put("${databasename}", databasename);
+ properties.put("${portnumber}", portnumber);
+
+ TYPES.valueOf(type.toUpperCase()).copyDataSourceFile(outFile,
properties);
+ }
+
@Override
public void delete(String name) throws Exception {
File karafBase = new File(System.getProperty("karaf.base"));
http://git-wip-us.apache.org/repos/asf/karaf/blob/0c7e0f47/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql.xml
----------------------------------------------------------------------
diff --git
a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql.xml
b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql.xml
index 35e6ed9..41f19d3 100644
---
a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql.xml
+++
b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql.xml
@@ -18,8 +18,9 @@
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<bean id="dataSource" class="net.sourceforge.jtds.jdbcx.JtdsDataSource">
- <property name="serverName" value="${url}"/>
- <property name="databaseName" value="${name}"/>
+ <property name="serverName" value="${servername}"/>
+ <property name="databaseName" value="${databasename}"/>
+ <property name="portNumber" value="${portnumber}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
</bean>