Repository: karaf
Updated Branches:
  refs/heads/karaf-2.x 96d04da22 -> 7e332da64


[KARAF-3959]make jdbc:create work better with MS SQL Server


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/7e332da6
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/7e332da6
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/7e332da6

Branch: refs/heads/karaf-2.x
Commit: 7e332da649329cb33df76346d0b3527182833053
Parents: 96d04da
Author: Freeman Fang <[email protected]>
Authored: Wed Aug 26 14:28:56 2015 +0800
Committer: Freeman Fang <[email protected]>
Committed: Wed Aug 26 14:28:56 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    | 41 +++++++++++++++++++-
 .../karaf/jdbc/internal/datasource-mssql.xml    |  7 ++--
 6 files changed, 101 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/7e332da6/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 46047ad..34fbb93 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/7e332da6/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 fd51ebd..cadd668 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/7e332da6/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/7e332da6/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 5f20159..f6e789c 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
@@ -75,6 +75,14 @@ public class JdbcMBeanImpl extends StandardMBean 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());
+        }
+    }
 
     public void delete(String name) throws MBeanException {
         try {

http://git-wip-us.apache.org/repos/asf/karaf/blob/7e332da6/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 0b884b6..c8eada7 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
@@ -127,7 +127,14 @@ public class JdbcServiceImpl implements JdbcService {
 
     private BundleContext bundleContext;
 
-    public void create(String name, String type, String driverClassName, 
String version, String url, String user, String password, boolean 
tryToInstallBundles) throws Exception {
+    public void create(String name, 
+                       String type, 
+                       String driverClassName, 
+                       String version, 
+                       String url, 
+                       String user, 
+                       String password, 
+                       boolean tryToInstallBundles) throws Exception {
         if (tryToInstallBundles) {
             TYPES.valueOf(type.toUpperCase()).installBundle(bundleContext, 
version);
         }
@@ -142,10 +149,40 @@ public class JdbcServiceImpl implements JdbcService {
         properties.put("${url}", url);
         properties.put("${user}", user);
         properties.put("${password}", password);
-
+        
         TYPES.valueOf(type.toUpperCase()).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);
+    }
+    
     public void delete(String name) throws Exception {
         File karafBase = new File(System.getProperty("karaf.base"));
         File deployFolder = new File(karafBase, "deploy");

http://git-wip-us.apache.org/repos/asf/karaf/blob/7e332da6/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 c62285d..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>
@@ -29,4 +30,4 @@
             <entry key="osgi.jndi.service.name" value="jdbc/${name}"/>
         </service-properties>
     </service>
-</blueprint>
\ No newline at end of file
+</blueprint>

Reply via email to