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>

Reply via email to