This is an automated email from the ASF dual-hosted git repository. klund pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
commit d315756f958e91875bbe79179de1ed37141502b6 Author: Kirk Lund <kl...@apache.org> AuthorDate: Mon May 6 11:04:10 2019 -0700 GEODE-6742: Rename and move ExceptionsDUnitTest to integrationTest * Rename to TransactionTimeoutExceptionIntegrationTest. * Fix up the tests with catchThrowable and assertions. * Move cachejta.xml and newDB to TemporaryFolder. * Use apache commons utils instead of inlined code. * Use just the XAPooledDataSource. --- .../internal/jta/dunit/ExceptionsDUnitTest.java | 296 --------------------- ...TransactionTimeoutExceptionIntegrationTest.java | 199 ++++++++++++++ ...ionTimeoutExceptionIntegrationTest_cachejta.xml | 250 +++++++++++++++++ 3 files changed, 449 insertions(+), 296 deletions(-) diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/jta/dunit/ExceptionsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/jta/dunit/ExceptionsDUnitTest.java deleted file mode 100755 index 60cf828..0000000 --- a/geode-core/src/distributedTest/java/org/apache/geode/internal/jta/dunit/ExceptionsDUnitTest.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more contributor license - * agreements. See the NOTICE file distributed with this work for additional information regarding - * copyright ownership. The ASF licenses this file to You under the Apache License, Version 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. - */ -package org.apache.geode.internal.jta.dunit; - -import static org.apache.geode.distributed.ConfigurationProperties.CACHE_XML_FILE; -import static org.apache.geode.test.util.ResourceUtils.createTempFileFromResource; -import static org.junit.Assert.fail; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.sql.SQLException; -import java.util.Properties; - -import javax.naming.Context; -import javax.sql.DataSource; -import javax.transaction.UserTransaction; - -import org.apache.geode.cache.Cache; -import org.apache.geode.cache.CacheFactory; -import org.apache.geode.distributed.DistributedSystem; -import org.apache.geode.internal.OSProcess; -import org.apache.geode.internal.jta.CacheUtils; -import org.apache.geode.test.dunit.Host; -import org.apache.geode.test.dunit.LogWriterUtils; -import org.apache.geode.test.dunit.VM; -import org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase; - -// TODO: this is a broken test that does not run -public class ExceptionsDUnitTest extends JUnit4DistributedTestCase { - - static DistributedSystem ds; - static Cache cache; - // private static String tblName; - - private static String readFile(String filename) throws IOException { - // String lineSep = System.getProperty("\n"); - BufferedReader br = new BufferedReader(new FileReader(filename)); - String nextLine = ""; - StringBuffer sb = new StringBuffer(); - while ((nextLine = br.readLine()) != null) { - sb.append(nextLine); - // - // note: - // BufferedReader strips the EOL character. - // - // sb.append(lineSep); - } - LogWriterUtils.getLogWriter().fine("***********\n " + sb); - return sb.toString(); - } - - public ExceptionsDUnitTest() { - super(); - } - - private static String modifyFile(String str) throws IOException { - String search = "<jndi-binding type=\"XAPooledDataSource\""; - String last_search = "</jndi-binding>"; - String newDB = "newDB_" + OSProcess.getId(); - String jndi_str = - "<jndi-binding type=\"XAPooledDataSource\" jndi-name=\"XAPooledDataSource\" jdbc-driver-class=\"org.apache.derby.jdbc.EmbeddedDriver\" init-pool-size=\"5\" max-pool-size=\"5\" idle-timeout-seconds=\"600\" blocking-timeout-seconds=\"6\" login-timeout-seconds=\"2\" conn-pooled-datasource-class=\"org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource\" xa-datasource-class=\"org.apache.derby.jdbc.EmbeddedXADataSource\" user-name=\"mitul\" password=\"83f0069202c571faf1ae6c42b [...] - + newDB + ";create=true\" >"; - String config_prop = "<config-property>" - + "<config-property-name>description</config-property-name>" - + "<config-property-type>java.lang.String</config-property-type>" - + "<config-property-value>hi</config-property-value>" + "</config-property>" - + "<config-property>" + "<config-property-name>user</config-property-name>" - + "<config-property-type>java.lang.String</config-property-type>" - + "<config-property-value>jeeves</config-property-value>" + "</config-property>" - + "<config-property>" + "<config-property-name>password</config-property-name>" - + "<config-property-type>java.lang.String</config-property-type>" - + "<config-property-value>83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a</config-property-value> " - + "</config-property>" + "<config-property>" - + "<config-property-name>databaseName</config-property-name>" - + "<config-property-type>java.lang.String</config-property-type>" - + "<config-property-value>" + newDB + "</config-property-value>" + "</config-property>\n"; - String new_str = jndi_str + config_prop; - /* - * String new_str = " <jndi-binding type=\"XAPooledDataSource\" jndi-name=\"XAPooledDataSource\" - * jdbc-driver-class=\"org.apache.derby.jdbc.EmbeddedDriver\" - * init-pool-size=\"5\" max-pool-size=\"5\" idle-timeout-seconds=\"600\" - * blocking-timeout-seconds=\"6\" login-timeout-seconds=\"2\" - * conn-pooled-datasource-class=\"org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource\" - * xa-datasource-class=\"org.apache.derby.jdbc.EmbeddedXADataSource\" user-name=\"mitul\" - * password=\"83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a\" - * connection-url=\"jdbc:derby:"+newDB+";create=true\" > <property - * key=\"description\" value=\"hi\"/> <property key=\"databaseName\" - * value=\""+newDB+"\"/> <property key=\"user\" value=\"mitul\"/> <property key=\"password\" - * value=\"83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a\"/>"; - */ - int n1 = str.indexOf(search); - LogWriterUtils.getLogWriter().fine("Start Index = " + n1); - int n2 = str.indexOf(last_search, n1); - StringBuffer sbuff = new StringBuffer(str); - LogWriterUtils.getLogWriter().fine("END Index = " + n2); - String modified_str = sbuff.replace(n1, n2, new_str).toString(); - return modified_str; - } - - public static void init() throws Exception { - Properties props = new Properties(); - int pid = OSProcess.getId(); - String path = File.createTempFile("dunit-cachejta_", ".xml").getAbsolutePath(); - /** * Return file as string and then modify the string accordingly ** */ - String file_as_str = readFile( - createTempFileFromResource(CacheUtils.class, "cachejta.xml") - .getAbsolutePath()); - file_as_str = file_as_str.replaceAll("newDB", "newDB_" + pid); - String modified_file_str = modifyFile(file_as_str); - FileOutputStream fos = new FileOutputStream(path); - BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(fos)); - wr.write(modified_file_str); - wr.flush(); - wr.close(); - props.setProperty(CACHE_XML_FILE, path); - // String tableName = ""; - // props.setProperty(DistributionConfig.ConfigurationProperties.MCAST_PORT, "10339"); - try { - // ds = DistributedSystem.connect(props); - ds = (new ExceptionsDUnitTest()).getSystem(props); - cache = CacheFactory.create(ds); - } catch (Exception e) { - e.printStackTrace(System.err); - throw new Exception("" + e); - } - } - - public static Cache getCache() { - return cache; - } - - public static void startCache() { - try { - if (cache == null || cache.isClosed()) { - cache = CacheFactory.create(ds); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void closeCache() { - try { - if (cache != null && !cache.isClosed()) { - cache.close(); - } - } catch (Exception e) { - e.printStackTrace(); - } - try { - if (ds != null) - ds.disconnect(); - } catch (Exception e) { - LogWriterUtils.getLogWriter().fine("Error in disconnecting from Distributed System"); - } - } - - @Override - public final void postSetUp() throws Exception { - Host host = Host.getHost(0); - VM vm0 = host.getVM(0); - vm0.invoke(() -> ExceptionsDUnitTest.init()); - } - - @Override - public final void preTearDown() throws Exception { - Host host = Host.getHost(0); - VM vm0 = host.getVM(0); - vm0.invoke(() -> ExceptionsDUnitTest.closeCache()); - } - - public static void testBlockingTimeOut() { - Host host = Host.getHost(0); - VM vm0 = host.getVM(0); - vm0.invoke(() -> ExceptionsDUnitTest.runTest1()); - } - - public static void testLoginTimeOut() { - Host host = Host.getHost(0); - VM vm0 = host.getVM(0); - vm0.invoke(() -> ExceptionsDUnitTest.runTest2()); - } - - public static void testTransactionTimeOut() { - Host host = Host.getHost(0); - VM vm0 = host.getVM(0); - vm0.invoke(() -> ExceptionsDUnitTest.runTest3()); - } - - public static void runTest1() throws Exception { - boolean exceptionOccurred = false; - try { - Context ctx = cache.getJNDIContext(); - DataSource ds1 = null; - DataSource ds2 = null; - ds1 = (DataSource) ctx.lookup("java:/XAPooledDataSource"); - ds2 = (DataSource) ctx.lookup("java:/SimpleDataSource"); - ds2.getConnection(); - ds1 = (DataSource) ctx.lookup("java:/XAPooledDataSource"); - UserTransaction utx = (UserTransaction) ctx.lookup("java:/UserTransaction"); - utx.begin(); - ds1.getConnection(); - Thread.sleep(8000); - try { - utx.commit(); - } catch (Exception e) { - exceptionOccurred = true; - } - if (!exceptionOccurred) - fail("Exception did not occur on commit although was supposed" + "occur"); - } catch (Exception e) { - LogWriterUtils.getLogWriter().fine("Exception caught in runTest1 due to : " + e); - fail("failed in runTest1 due to " + e); - } - } - - public static void runTest2() throws Exception { - boolean exceptionOccurred1 = false; - boolean exceptionOccurred2 = false; - try { - Context ctx = cache.getJNDIContext(); - DataSource ds1 = null; - DataSource ds2 = null; - ds1 = (DataSource) ctx.lookup("java:/XAPooledDataSource"); - ds2 = (DataSource) ctx.lookup("java:/SimpleDataSource"); - ds2.getConnection(); - ds1.getConnection(); - ds1.getConnection(); - ds1.getConnection(); - ds1.getConnection(); - ds1.getConnection(); - UserTransaction utx = (UserTransaction) ctx.lookup("java:/UserTransaction"); - utx.begin(); - try { - ds1.getConnection(); - Thread.sleep(8000); - } catch (SQLException e) { - exceptionOccurred1 = true; - } - try { - utx.commit(); - } catch (Exception e) { - exceptionOccurred2 = true; - } - if (!exceptionOccurred1) - fail("Exception (Login-Time-Out)did not occur although was supposed" + "to occur"); - if (exceptionOccurred2) - fail("Exception did occur on commit, although was not supposed" + "to occur"); - } catch (Exception e) { - fail("failed in runTest2 due to " + e); - } - } - - public static void runTest3() throws Exception { - boolean exceptionOccurred = false; - try { - Context ctx = cache.getJNDIContext(); - DataSource ds1 = null; - DataSource ds2 = null; - ds1 = (DataSource) ctx.lookup("java:/XAPooledDataSource"); - ds2 = (DataSource) ctx.lookup("java:/SimpleDataSource"); - ds2.getConnection(); - UserTransaction utx = (UserTransaction) ctx.lookup("java:/UserTransaction"); - utx.begin(); - utx.setTransactionTimeout(2); - ds1.getConnection(); - Thread.sleep(4000); - try { - utx.commit(); - } catch (Exception e) { - exceptionOccurred = true; - } - if (!exceptionOccurred) - fail("Exception (Transaction-Time-Out)did not occur although was supposed" + "to occur"); - } catch (Exception e) { - fail("failed in runTest3 due to " + e); - } - } -} diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/jta/TransactionTimeoutExceptionIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/jta/TransactionTimeoutExceptionIntegrationTest.java new file mode 100755 index 0000000..b13f9f5 --- /dev/null +++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/jta/TransactionTimeoutExceptionIntegrationTest.java @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 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. + */ +package org.apache.geode.internal.jta; + +import static org.apache.geode.distributed.ConfigurationProperties.CACHE_XML_FILE; +import static org.apache.geode.test.util.ResourceUtils.getResource; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; + +import java.io.File; +import java.nio.charset.Charset; +import java.sql.SQLException; +import java.time.Duration; +import java.util.Properties; +import java.util.regex.Pattern; + +import javax.naming.Context; +import javax.sql.DataSource; +import javax.transaction.SystemException; +import javax.transaction.UserTransaction; +import javax.transaction.xa.XAException; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.CacheFactory; +import org.apache.geode.internal.process.ProcessUtils; + +/** + * Fixed up (best as possible) and re-enabled JTA tests from ExceptionsDUnitTest. Treat these as + * characterization tests because I think some of this behavior is not strictly correct. + */ +public class TransactionTimeoutExceptionIntegrationTest { + + private static final Pattern NEW_DB_PATTERN = Pattern.compile("newDB"); + private static final int DATA_SOURCE_POOL_SIZE = 2; + private static final int BLOCKING_TIMEOUT_SECONDS = 6; + private static final int IDLE_TIMEOUT_SECONDS = 600; + private static final int LOGIN_TIMEOUT_SECONDS = 2; + private static final int TRANSACTION_TIMEOUT_SECONDS = 2; + + private Cache cache; + + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + + @Before + public void setUp() throws Exception { + String derbySystemHome = temporaryFolder.newFolder("derby").getAbsolutePath(); + System.setProperty("derby.system.home", derbySystemHome); + + String newDB = "newDB_" + ProcessUtils.identifyPid(); + + String input = + IOUtils.toString(getResource("TransactionTimeoutExceptionIntegrationTest_cachejta.xml"), + Charset.defaultCharset()); + input = NEW_DB_PATTERN.matcher(input).replaceAll(newDB); + String output = modifyCacheJtaXml(input, newDB); + File cacheJtaXmlFile = temporaryFolder.newFile("cachejta.xml"); + + FileUtils.writeStringToFile(cacheJtaXmlFile, output, Charset.defaultCharset()); + + Properties props = new Properties(); + props.setProperty(CACHE_XML_FILE, cacheJtaXmlFile.getAbsolutePath()); + + cache = new CacheFactory(props).create(); + } + + @After + public void tearDown() throws Exception { + cache.close(); + } + + @Test + public void testBlockingTimeOut() throws Exception { + Context jndiContext = cache.getJNDIContext(); + DataSource dataSource = (DataSource) jndiContext.lookup("java:/XAPooledDataSource"); + UserTransaction utx = (UserTransaction) jndiContext.lookup("java:/UserTransaction"); + utx.begin(); + dataSource.getConnection(); + + // sleep longer than the blocking timeout (nothing exposed to await on) + Thread.sleep(Duration.ofSeconds(BLOCKING_TIMEOUT_SECONDS * 2).toMillis()); + + Throwable thrown = catchThrowable(() -> utx.commit()); + + // NOTE: XAException is double-wrapped in SystemException (probably unintentional) + assertThat(thrown) + .isInstanceOf(SystemException.class); + assertThat(thrown.getCause()) + .isInstanceOf(SystemException.class) + .hasCauseInstanceOf(XAException.class) + .hasMessageContaining("No current connection"); + } + + @Test + public void testLoginTimeOut() throws Exception { + Context jndiContext = cache.getJNDIContext(); + DataSource dataSource = (DataSource) jndiContext.lookup("java:/XAPooledDataSource"); + for (int i = 0; i < DATA_SOURCE_POOL_SIZE; i++) { + dataSource.getConnection(); + } + + Throwable thrown = catchThrowable(() -> dataSource.getConnection()); + + assertThat(thrown) + .isInstanceOf(SQLException.class) + .hasMessageContaining("Login time-out exceeded"); + } + + @Test + public void testTransactionTimeOut() throws Exception { + Context jndiContext = cache.getJNDIContext(); + DataSource dataSource = (DataSource) jndiContext.lookup("java:/XAPooledDataSource"); + dataSource.getConnection(); + UserTransaction utx = (UserTransaction) jndiContext.lookup("java:/UserTransaction"); + utx.begin(); + utx.setTransactionTimeout(TRANSACTION_TIMEOUT_SECONDS); + + // sleep longer than the transaction timeout (nothing exposed to await on) + Thread.sleep(Duration.ofSeconds(TRANSACTION_TIMEOUT_SECONDS * 2).toMillis()); + + Throwable thrown = catchThrowable(() -> utx.commit()); + + assertThat(thrown) + .isInstanceOf(IllegalStateException.class) + .hasMessageContaining("Transaction is null, cannot commit a null transaction"); + } + + private String modifyCacheJtaXml(String jtaConfig, String newDB) { + String begin = "<jndi-binding type=\"XAPooledDataSource\""; + String end = "</jndi-binding>"; + String jndiBinding = + "<jndi-binding type=\"XAPooledDataSource\" " + + "jndi-name=\"XAPooledDataSource\" " + + "jdbc-driver-class=\"org.apache.derby.jdbc.EmbeddedDriver\" " + + "init-pool-size=\"" + DATA_SOURCE_POOL_SIZE + "\" " + + "max-pool-size=\"" + DATA_SOURCE_POOL_SIZE + "\" " + + "idle-timeout-seconds=\"" + IDLE_TIMEOUT_SECONDS + "\" " + + "blocking-timeout-seconds=\"" + BLOCKING_TIMEOUT_SECONDS + "\" " + + "login-timeout-seconds=\"" + LOGIN_TIMEOUT_SECONDS + "\" " + + "conn-pooled-datasource-class=\"org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource\" " + + + "xa-datasource-class=\"org.apache.derby.jdbc.EmbeddedXADataSource\" " + + "user-name=\"mitul\" " + + "password=\"83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a\" " + + "connection-url=\"jdbc:derby:" + newDB + ";create=true\" >"; + String configProperty = + "<config-property>" + + "<config-property-name>description</config-property-name>" + + "<config-property-type>java.lang.String</config-property-type>" + + "<config-property-value>hi</config-property-value>" + + "</config-property>" + + "<config-property>" + + "<config-property-name>user</config-property-name>" + + "<config-property-type>java.lang.String</config-property-type>" + + "<config-property-value>jeeves</config-property-value>" + + "</config-property>" + + "<config-property>" + + "<config-property-name>password</config-property-name>" + + "<config-property-type>java.lang.String</config-property-type>" + + "<config-property-value>" + + "83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a" + + "</config-property-value>" + + "</config-property>" + + "<config-property>" + + "<config-property-name>databaseName</config-property-name>" + + "<config-property-type>java.lang.String</config-property-type>" + + "<config-property-value>" + newDB + "</config-property-value>" + + "</config-property>" + + System.lineSeparator(); + + String modifiedConfig = jndiBinding + configProperty; + + int indexOfBegin = jtaConfig.indexOf(begin); + int indexOfEnd = jtaConfig.indexOf(end, indexOfBegin); + + return new StringBuilder(jtaConfig).replace(indexOfBegin, indexOfEnd, modifiedConfig) + .toString(); + } +} diff --git a/geode-core/src/integrationTest/resources/org/apache/geode/internal/jta/TransactionTimeoutExceptionIntegrationTest_cachejta.xml b/geode-core/src/integrationTest/resources/org/apache/geode/internal/jta/TransactionTimeoutExceptionIntegrationTest_cachejta.xml new file mode 100644 index 0000000..fc26388 --- /dev/null +++ b/geode-core/src/integrationTest/resources/org/apache/geode/internal/jta/TransactionTimeoutExceptionIntegrationTest_cachejta.xml @@ -0,0 +1,250 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more contributor license + ~ agreements. See the NOTICE file distributed with this work for additional information regarding + ~ copyright ownership. The ASF licenses this file to You under the Apache License, Version 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. + --> +<!DOCTYPE cache PUBLIC + "-//GemStone Systems, Inc.//GemFire Declarative Caching 7.0//EN" + "http://www.gemstone.com/dtd/cache7_0.dtd"> +<cache lock-lease="120" lock-timeout="60" search-timeout="300"> + <vm-root-region name="root"> + <region-attributes scope="distributed-no-ack" data-policy="normal" initial-capacity="16" load-factor="0.75" concurrency-level="16" statistics-enabled="true"> + <region-time-to-live> + <expiration-attributes timeout="0" action="invalidate"/> + </region-time-to-live> + <region-idle-time> + <expiration-attributes timeout="0" action="invalidate"/> + </region-idle-time> + <entry-time-to-live> + <expiration-attributes timeout="0" action="invalidate"/> + </entry-time-to-live> + <entry-idle-time> + <expiration-attributes timeout="0" action="invalidate"/> + </entry-idle-time> + </region-attributes> + <entry> + <key> + <string>Application Version</string> + </key> + <value> + <string>1.0</string> + </value> + </entry> + </vm-root-region> + + <jndi-bindings> + <jndi-binding type="SimpleDataSource" jndi-name="SimpleDataSource" + jdbc-driver-class="org.apache.derby.jdbc.EmbeddedDriver" + init-pool-size="2" max-pool-size="7" + idle-timeout-seconds="40" + blocking-timeout-seconds="40" + login-timeout-seconds="60" + conn-pooled-datasource-class="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource" + xa-datasource-class="org.apache.derby.jdbc.EmbeddedXADataSource" + user-name="mitul" + password="83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a" + connection-url="jdbc:derby:newDB;create=true"> + <config-property> + <config-property-name>description</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>hi</config-property-value> + </config-property> + + <config-property> + <config-property-name>databaseName</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>newDB</config-property-value> + </config-property> + </jndi-binding> + + <jndi-binding type="PooledDataSource" jndi-name="PooledDataSource" + jdbc-driver-class="org.apache.derby.jdbc.EmbeddedDriver" + init-pool-size="2" max-pool-size="7" + idle-timeout-seconds="20" + blocking-timeout-seconds="20" + login-timeout-seconds="30" + conn-pooled-datasource-class="org.apache.geode.internal.jta.CacheJTAPooledDataSourceFactory" + xa-datasource-class="org.apache.derby.jdbc.EmbeddedXADataSource" + user-name="mitul" + password="83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a" + connection-url="jdbc:derby:newDB;create=true"> + + <config-property> + <config-property-name>description</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>hi</config-property-value> + </config-property> + + <config-property> + <config-property-name>user</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>mitul</config-property-value> + </config-property> + + <config-property> + <config-property-name>password</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a</config-property-value> + </config-property> + + <config-property> + <config-property-name>databaseName</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>newDB</config-property-value> + </config-property> + + </jndi-binding> + + <jndi-binding type="XAPooledDataSource" jndi-name="XAPooledDataSource" + jdbc-driver-class="org.apache.derby.jdbc.EmbeddedDriver" + init-pool-size="2" max-pool-size="7" + idle-timeout-seconds="20" + blocking-timeout-seconds="20" + login-timeout-seconds="30" + conn-pooled-datasource-class="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource" + xa-datasource-class="org.apache.derby.jdbc.EmbeddedXADataSource" + user-name="mitul" + password="83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a" + connection-url="jdbc:derby:newDB;create=true"> + <config-property> + <config-property-name>description</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>hi</config-property-value> + </config-property> + + <config-property> + <config-property-name>user</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>mitul</config-property-value> + </config-property> + + <config-property> + <config-property-name>password</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a</config-property-value> + </config-property> + + <config-property> + <config-property-name>databaseName</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>newDB</config-property-value> + </config-property> + + </jndi-binding> + <jndi-binding type="XAPooledDataSource" jndi-name="XAHydraPooledDataSource" + jdbc-driver-class="org.apache.derby.jdbc.EmbeddedDriver" + init-pool-size="2" max-pool-size="30" + idle-timeout-seconds="300" + blocking-timeout-seconds="300" + login-timeout-seconds="50" + conn-pooled-datasource-class="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource" + xa-datasource-class="org.apache.derby.jdbc.EmbeddedXADataSource" + user-name="mitul" + password="83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a" + connection-url="jdbc:derby:newDB;create=true"> + <config-property> + <config-property-name>description</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>hi</config-property-value> + </config-property> + + <config-property> + <config-property-name>user</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>mitul</config-property-value> + </config-property> + + <config-property> + <config-property-name>password</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a</config-property-value> + </config-property> + + <config-property> + <config-property-name>databaseName</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>newDB</config-property-value> + </config-property> + + </jndi-binding> + + <jndi-binding type="XAPooledDataSource" jndi-name="XAMultiThreadedDataSource" + jdbc-driver-class="org.apache.derby.jdbc.EmbeddedDriver" + init-pool-size="2" max-pool-size="5" + idle-timeout-seconds="300" + blocking-timeout-seconds="300" + login-timeout-seconds="300" + conn-pooled-datasource-class="org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource" + xa-datasource-class="org.apache.derby.jdbc.EmbeddedXADataSource" + user-name="mitul" + password="83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a" + connection-url="jdbc:derby:newDB;create=true"> + <config-property> + <config-property-name>description</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>hi</config-property-value> + </config-property> + + <config-property> + <config-property-name>user</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>mitul</config-property-value> + </config-property> + + <config-property> + <config-property-name>password</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a</config-property-value> + </config-property> + + <config-property> + <config-property-name>databaseName</config-property-name> + <config-property-type>java.lang.String</config-property-type> + <config-property-value>newDB</config-property-value> + </config-property> + + </jndi-binding> + </jndi-bindings> +</cache> +<!-- +Binding TransactionManager +Case 1: Use of GemFire JNDI Context +GemFire TransactionManager will be bound to the GemFire JNDI tree. + +Case 2: Application Server JNDI Context + If a TransactionManager is associated with Application Server JNDI tree (if exists), + the GemFire system will make reference of that. Otherwise GemFire TransactionManager + will be bound to the Application Server JNDI tree. + +Binding UserTransaction + UserTransaction will be bound to same JNDI tree where GemFire TransactionManager is bound. + If an Application Server TransactionManager bound to Application Server JNDI tree + GemFire UserTransaction will not be bound at all. + +Lookup for UserTransaction + +Case 1: Use of Application Server JNDI tree and Application Server TransactionManager is available. + GemFire UserTransaction will not come into picture. + Should be referred as per Application Server specification. +Case 2: In any other case (Includes use of GemFire JNDI tree, Application Server JNDI tree with +GemFire TransactionManager) + UserTransaction will be looked up with java:/UserTransaction + + +Binding and Lookup of DataSource + In all scenario, the GemFire DataSource will be bound to the available JNDI tree. + jndi-name attribute of jndi-binding element is key binding parameters. + if the value of jndi-name is aDataSource, it will be bound as java:/aDataSource. + The type attribute of jndi-binding element should be SimpleDataSource, PooledDataSource + or XAPooledDataSource. +-->