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..134006c 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 @@ -29,6 +29,9 @@ @Option(name = "-t", aliases = { "--type" }, description = "The JDBC datasource type (generic, MySQL, MSSQL, Oracle, Postgres, H2, HSQL, Derby)", required = false, multiValued = false) String type; + @Option(name = "-tx", description = "The transaction type (local, xa)", required = false, multiValued = false) + String transaction; + @Option(name = "-d", aliases = { "--driver" }, description = "The classname of the JDBC driver to use. NB: this option is used only the type generic", required = false, multiValued = false) String driver; @@ -48,7 +51,7 @@ boolean installBundles = false; public Object doExecute() throws Exception { - this.getJdbcService().create(name, type, driver, version, url, username, password, installBundles); + this.getJdbcService().create(name, type, transaction, driver, version, url, username, password, installBundles); return null; } 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..8660659 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 @@ -38,6 +38,7 @@ * * @param name the JDBC datasource name. * @param type the JDBC datasource type (generic, MySQL, MSSQL, Oracle, Postgres, H2, HSQL, Derby). + * @param transaction the JDBC transaction type (local, xa) * @param driver the JDBC datasource driver class name (can be null). * @param version the target JDBC driver version (can be null). * @param url the JDBC URL. @@ -46,7 +47,7 @@ * @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 url, String user, String password, boolean installBundles) throws MBeanException; + void create(String name, String type, String transaction, String driver, String version, String url, String user, String password, boolean installBundles) throws MBeanException; /** * Delete a JDBC datasource. 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..3360da2 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 @@ -30,6 +30,7 @@ * * @param name the JDBC datasource name. * @param type the backend database type (generic, Oracle, MySQL, ...) + * @param transaction the backend transaction type (local, xa) * @param driverClassName the JDBC driver classname. * @param version the JDBC driver version to use. * @param url the JDBC URL. @@ -37,7 +38,7 @@ * @param password the database password. * @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; + void create(String name, String type, String transaction, String driverClassName, String version, String url, String user, String password, boolean tryToInstallBundles) throws Exception; /** * Delete a JDBC datasource identified by a name. 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..a6dec49 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 @@ -68,9 +68,9 @@ } } - public void create(String name, String type, String driver, String version, String url, String user, String password, boolean installBundles) throws MBeanException { + public void create(String name, String type, String transaction, String driver, String version, String url, String user, String password, boolean installBundles) throws MBeanException { try { - jdbcService.create(name, type, driver, version, url, user, password, installBundles); + jdbcService.create(name, type, transaction, driver, version, url, user, password, installBundles); } catch (Exception e) { throw new MBeanException(null, e.getMessage()); } 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..72a985d 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 @@ -34,25 +34,31 @@ */ public class JdbcServiceImpl implements JdbcService { + public static enum TransactionType { + LOCAL, XA; + } + public static enum TYPES { - DB2("wrap:mvn:com.ibm.db2.jdbc/db2jcc/", "9.7", "datasource-db2.xml"), - DERBY("mvn:org.apache.derby/derby/", "10.8.2.2", "datasource-derby.xml"), - GENERIC(null, null, "datasource-generic.xml"), - H2("mvn:com.h2database/h2/", "1.3.163", "datasource-h2.xml"), - HSQL("mvn:org.hsqldb/hsqldb/", "2.3.2", "datasource-hsql.xml"), - MYSQL("mvn:mysql/mysql-connector-java/", "5.1.18", "datasource-mysql.xml"), - MSSQL("wrap:mvn:net.sourceforge.jtds/jtds/", "1.2.4", "datasource-mssql.xml"), - ORACLE("wrap:mvn:ojdbc/ojdbc/", "11.2.0.2.0", "datasource-oracle.xml"), - POSTGRES("wrap:mvn:postgresql/postgresql/", "9.1-901.jdbc4", "datasource-postgres.xml"); + DB2("wrap:mvn:com.ibm.db2.jdbc/db2jcc/", "9.7", "datasource-db2.xml", "datasource-db2-xa.xml"), + DERBY("mvn:org.apache.derby/derby/", "10.8.2.2", "datasource-derby.xml","datasource-derby-xa.xml"), + GENERIC(null, null, "datasource-generic.xml", "datasource-generic-xa.xml"), + H2("mvn:com.h2database/h2/", "1.3.163", "datasource-h2.xml", "datasource-h2-xa.xml"), + HSQL("mvn:org.hsqldb/hsqldb/", "2.3.2", "datasource-hsql.xml", "datasource-hsql-xa.xml"), + MYSQL("mvn:mysql/mysql-connector-java/", "5.1.18", "datasource-mysql.xml", "datasource-mysql-xa.xml"), + MSSQL("wrap:mvn:net.sourceforge.jtds/jtds/", "1.2.4", "datasource-mssql.xml", "datasource-mssql-xa.xml"), + ORACLE("wrap:mvn:ojdbc/ojdbc/", "11.2.0.2.0", "datasource-oracle.xml", "datasource-oracle-xa.xml"), + POSTGRES("wrap:mvn:postgresql/postgresql/", "9.1-901.jdbc4", "datasource-postgres.xml", "datasource-postgres-xa.xml"); private final String bundleUrl; private final String defaultVersion; - private final String templateFile; + private final String templateFileLocal; + private final String templateFileXa; - TYPES(String bundleUrl, String defaultVersion, String templateFile) { + TYPES(String bundleUrl, String defaultVersion, String templateFileLocal, String templateFileXa) { this.bundleUrl = bundleUrl; this.defaultVersion = defaultVersion; - this.templateFile = templateFile; + this.templateFileLocal = templateFileLocal; + this.templateFileXa = templateFileXa; } public void installBundle(BundleContext bundleContext, String version) throws Exception { @@ -63,11 +69,20 @@ } } - public void copyDataSourceFile(File outFile, HashMap properties) throws Exception { + public void copyDataSourceFile(TransactionType tx, File outFile, HashMap properties) throws Exception { + String templateFile = null; + switch (tx) { + case LOCAL: + templateFile = templateFileLocal; + break; + case XA: + templateFile = templateFileXa; + break; + } if (!outFile.exists()) { - InputStream is = JdbcServiceImpl.class.getResourceAsStream(this.templateFile); + InputStream is = JdbcServiceImpl.class.getResourceAsStream(templateFile); if (is == null) { - throw new IllegalArgumentException("Resource " + this.templateFile + " doesn't exist"); + throw new IllegalArgumentException("Resource " + templateFile + " doesn't exist"); } try { // read it line at a time so that we can use the platform line ending when we write it out @@ -127,7 +142,7 @@ 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 transaction, String driverClassName, String version, String url, String user, String password, boolean tryToInstallBundles) throws Exception { if (tryToInstallBundles) { TYPES.valueOf(type.toUpperCase()).installBundle(bundleContext, version); } @@ -143,7 +158,7 @@ properties.put("${user}", user); properties.put("${password}", password); - TYPES.valueOf(type.toUpperCase()).copyDataSourceFile(outFile, properties); + TYPES.valueOf(type.toUpperCase()).copyDataSourceFile(TransactionType.valueOf(transaction.toUpperCase()), outFile, properties); } public void delete(String name) throws Exception { diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-db2-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-db2-xa.xml new file mode 100644 index 0000000..8b13b30 --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-db2-xa.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-db2.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-db2.xml index 6ae8ea8..0592928 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-db2.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-db2.xml @@ -15,18 +15,26 @@ the specific language governing permissions and limitations under the License. --> - + - + - + + + + - \ No newline at end of file + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-derby-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-derby-xa.xml new file mode 100644 index 0000000..66fd983 --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-derby-xa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-derby.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-derby.xml index 13e3e7f..0ebd5f2 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-derby.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-derby.xml @@ -16,23 +16,23 @@ License. --> + xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0" + xmlns:jdbc="http://aries.apache.org/xmlns/transaction-jdbc/2.1"> - + - + - - - - - + - + - + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-generic-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-generic-xa.xml new file mode 100644 index 0000000..17a00b2 --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-generic-xa.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-generic.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-generic.xml index 286d82c..f39c5a5 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-generic.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-generic.xml @@ -8,134 +8,39 @@ 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. - --> - + 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. +--> + - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - \ No newline at end of file + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-h2-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-h2-xa.xml new file mode 100644 index 0000000..d5d22fc --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-h2-xa.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-h2.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-h2.xml index ff93e32..907964d 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-h2.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-h2.xml @@ -15,7 +15,9 @@ the specific language governing permissions and limitations under the License. --> - + @@ -23,9 +25,16 @@ - + + + + - \ No newline at end of file + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-hsql-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-hsql-xa.xml new file mode 100644 index 0000000..ee29bf3 --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-hsql-xa.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-hsql.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-hsql.xml index e869eb7..0b8ed64 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-hsql.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-hsql.xml @@ -15,7 +15,9 @@ the specific language governing permissions and limitations under the License. --> - + @@ -23,9 +25,16 @@ - + + + + - \ No newline at end of file + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql-xa.xml new file mode 100644 index 0000000..43e345e --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mssql-xa.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 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..dcebcd1 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 @@ -15,7 +15,9 @@ the specific language governing permissions and limitations under the License. --> - + @@ -24,9 +26,16 @@ - + + + + - \ No newline at end of file + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mysql-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mysql-xa.xml new file mode 100644 index 0000000..432ee93 --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mysql-xa.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mysql.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mysql.xml index 75fed3a..6fb1b02 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mysql.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-mysql.xml @@ -15,7 +15,9 @@ the specific language governing permissions and limitations under the License. --> - + @@ -23,9 +25,16 @@ - + + + + - \ No newline at end of file + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-oracle-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-oracle-xa.xml new file mode 100644 index 0000000..961e6a6 --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-oracle-xa.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-oracle.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-oracle.xml index d9e8853..f2ad948 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-oracle.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-oracle.xml @@ -15,7 +15,9 @@ the specific language governing permissions and limitations under the License. --> - + @@ -23,9 +25,16 @@ - + + + + - \ No newline at end of file + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-postgres-xa.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-postgres-xa.xml new file mode 100644 index 0000000..69042b8 --- /dev/null +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-postgres-xa.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-postgres.xml b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-postgres.xml index c9d2bcb..227e78c 100644 --- a/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-postgres.xml +++ b/jdbc/core/src/main/resources/org/apache/karaf/jdbc/internal/datasource-postgres.xml @@ -15,20 +15,27 @@ the specific language governing permissions and limitations under the License. --> - + - + - - - + + + + - \ No newline at end of file + +