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>
