JTA Transaction Manager

Overview

Build Status

The master version of the current source was built and published on maven central over here.

Help!

help wanted

BTM is looking for a new motivated team to look after it. If you would like to take over the project, please by all means contact us: @bitronix and @BrettWooldridge.

Home of BTM, the Bitronix JTA Transaction Manager

The Bitronix Transaction Manager (BTM) is a simple but complete implementation of the JTA 1.1 API. It is a fully working XA transaction manager that provides all services required by the JTA API while trying to keep the code as simple as possible for easier understanding of the XA semantics.

What's New

The BTM 3.0 release has two primary goals: performance improvements, and code modernization. The codebase was moved from a Java 1.4 codebase to Java 5, taking advantage of generics for type-safety and java.util.concurrent classes for improved performance. Notable improvements are:

  • Greater use of low-contention lock collections throughout the code and the removal of most large-grained locks.
  • A new connection pool with a focus on zero-wait connection acquisition and concurrent expansion/contraction. For one large workload compared to BTM 2.1 total connection wait time went from 76 seconds to 372ms, and lock contentions went from 26269 to just 21.
  • High-performance proxies around javax.sql entities via bytecode generation with support for Javassist, and cglib, with fallback to java.lang.reflect.proxy. Javassist and cglib offer substantial performance increases and are strongly recommended.
  • High-performance transaction log journaling using a new design that allows concurrent appenders through a write-reservation model. The new journal is 3-14x faster than BTM 2.1.
  • Support for all levels of JDBC upto and including JDBC 4.1
  • OSGi support
  • A change of license from LGPL v3 to Apache 2.

General Information

Configuration

Comments
  • ResourceBean volatile increment of int variable

    ResourceBean volatile increment of int variable

    The increment is not an atomic operation, even if we use a volatile variable.

    private volatile transient int createdResourcesCounter;

    public int incCreatedResourcesCounter() { return this.createdResourcesCounter++; }

    This could be fixed by replacing the int variable with an AtomicInteger.

    opened by vladmihalcea 28
  • How to bind the unWrapped native connection object to Spring @Transactional platformTransactionManager

    How to bind the unWrapped native connection object to Spring @Transactional platformTransactionManager

    Tomcat 8 Web server with Bitronix Transaction Manager as Distributed Transaction Manager Below are the properties for datasource : resource.ds1.className=oracle.jdbc.xa.client.OracleXADataSource resource.ds1.uniqueName=jdbc/oracledb resource.ds1.minPoolSize=0 resource.ds1.maxPoolSize=10 resource.ds1.driverProperties.user=user1 resource.ds1.driverProperties.password=user2 resource.ds1.driverProperties.URL=jdbc:oracle:thin:@//URL:1521/SCHEMA resource.ds1.allowLocalTransactions=true resource.ds1.shareTransactionConnections=false resource.ds1.localAutoCommit=true resource.ds1.ignoreRecoveryFailures=false resource.ds1.automaticEnlistingEnabled=true resource.ds1.applyTransactionTimeout=true

    Below is the bean configuration for datasource in Spring: @Bean(name = "dataSource", initMethod = "init", destroyMethod = "close") public DataSource dataSource() throws Exception { JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup(); DataSource ds = dataSourceLookup.getDataSource("java:comp/env/jdbc/oracledb"); return ds; } @Bean(name = "bitronixTransactionManager", destroyMethod = "shutdown") public UserTransaction bitronixTransactionManager() throws NamingException { JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean(); return (UserTransaction) jndiObjectFactoryBean.getJndiTemplate().lookup("java:comp/UserTransaction"); }

    @Bean(name = "platformTransactionManager")
    @DependsOn({ "bitronixTransactionManager" })
    public PlatformTransactionManager platformTransactionManager() throws Throwable {
    	JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(bitronixTransactionManager());
    	jtaTransactionManager.setRollbackOnCommitFailure(true);
    	jtaTransactionManager.setAllowCustomIsolationLevels(true);
    	jtaTransactionManager.setGlobalRollbackOnParticipationFailure(true);
    	return jtaTransactionManager;
    }
    

    Below is my method in one of the classes publi class Test{

    @Autowired DataSource dataSource; @Transactional(value = "platformTransactionManager", propagation = Propagation.REQUIRED) public void testTransaction() { throws Exception { Connection conn = DataSourceUtils.getConnection(dataSource); Connection connectionToUse = conn.unwrap(java.sql.Connection.class); //1. create a statement using connectionToUse and write a record to the database //2. have some JMS related operations to publish which I dont have issue to publish. everything works fine throw new RuntimeException(); //3. after throwing an exception the write operation performed by connectinToUse object should be rolled back but in this case, it's not getting rolled back, } }

    not able to bind the unwrapped connection object to the existing transaction.

    opened by vka255 12
  • bitronix.tm.osgi.Activator class is incompatible with JDK5

    bitronix.tm.osgi.Activator class is incompatible with JDK5

    The Activator class contains these lines:

    FileReader fileReader = new FileReader(cfgFile);
    try {
        btmProperties.load(fileReader);
    }
    finally {
        fileReader.close();
    }
    

    Unfortunately, the Properties.load(Reader) API only exists since JDK6. To be compatible with JDK5 (which is your declared target), you need to use a FileInputStream instead of a FileReader.

    Or you could switch to JDK6, now that JDK8 has been released.

    On the positive side, this does appear to be the only JDK6 issue in the project.

    opened by rankinc 10
  • Added metrics support (using Codahale metrics).

    Added metrics support (using Codahale metrics).

    Added CodaHale Metrics support Added PoolingDataSource connection wait time metric Added PoolingDataSource in-use-connections histogram metric

    Refactored the in-use-connections logic since previous code review, please check its logic out. Basically it should tell how many connections are in use at any given time, for building an accurate histogram. My current solution is based on subtracting: totalPoolSize - availablePoolSize.

    opened by vladmihalcea 9
  • Improve Spring integration

    Improve Spring integration

    Spring beans needed for BTM can be configured as follows:

        <bean id="dataSource" class="bitronix.tm.integration.spring.PoolingDataSourceFactoryBean">
            <property name="className" value="..." />
            <property name="uniqueName" value="..." />
            <property name="maxPoolSize" value="..." />
            <property name="etc" value="etc" />
            <property name="driverProperties">
                ...
            </property>
        </bean>
    
        <bean id="transactionManager" class="bitronix.tm.integration.spring.PlatformTransactionManager"/>
    

    The PoolingDataSourceFactoryBean correctly works together with Spring's lifecycle management.

    opened by marcus-nl 9
  • Using bitronox manager, XA not working with my custom dev-kit adapter

    Using bitronox manager, XA not working with my custom dev-kit adapter

    Please find my below post.

    https://help.mulesoft.com/s/question/0D52T00004tJ6KqSAK/using-bitronox-manager-xa-not-working-with-my-custom-devkit-adapter Please find the logs, it delisting my resource.

    2019-12-11 16:59:48,350 [Receiving Thread] INFO org.mule.transport.service.DefaultTransportServiceDescriptor - Loading default outbound transformer: org.mule.transport.jms.transformers.ObjectToJMSMessage 2019-12-11 16:59:48,350 [Receiving Thread] INFO org.mule.transport.service.DefaultTransportServiceDescriptor - Loading default response transformer: org.mule.transport.jms.transformers.ObjectToJMSMessage 2019-12-11 16:59:48,350 [Receiving Thread] WARN com.mulesoft.mule.transport.jms.EeJmsMessageDispatcher - Starting patched JmsMessageReceiver 2019-12-11 16:59:48,351 [Receiving Thread] INFO org.mule.lifecycle.AbstractLifecycleManager - Initialising: 'JMS.dispatcher.119843459'. Object is: EeJmsMessageDispatcher 2019-12-11 16:59:48,352 [Receiving Thread] INFO org.mule.lifecycle.AbstractLifecycleManager - Starting: 'JMS.dispatcher.119843459'. Object is: EeJmsMessageDispatcher 2019-12-11 16:59:48,353 [Receiving Thread] DEBUG bitronix.tm.resource.jms.JmsPooledConnection - 0 session(s) open from a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,353 [Receiving Thread] DEBUG bitronix.tm.resource.jms.JmsPooledConnection - no session handle found in NOT_ACCESSIBLE state, creating new session 2019-12-11 16:59:48,354 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - getting session handle from a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,354 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 0 stateChangeEventListener(s) about state changing from IN_POOL to ACCESSIBLE in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,354 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - state changing from IN_POOL to ACCESSIBLE in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,354 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 0 stateChangeEventListener(s) about state changed from IN_POOL to ACCESSIBLE in a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,356 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - choosing XA session 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - closing a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - delisting a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 from a Bitronix Transaction with GTRID [31363035383232353635000000002582E13C00000001], status=ACTIVE, 1 resource(s) enlisted (started Thu Jan 08 12:18:54 IST 1970) 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - resource is not in enlisting global transaction context: a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - requeuing a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 from a Bitronix Transaction with GTRID [31363035383232353635000000002582E13C00000001], status=ACTIVE, 1 resource(s) enlisted (started Thu Jan 08 12:18:54 IST 1970) 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - resource is not in enlisting global transaction context: a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - looking in in-flight transactions for XAResourceHolderState of a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAResourceHolder - resource not enlisted in any transaction: a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - resource not in enlisting global transaction context, immediately releasing to pool a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changing from ACCESSIBLE to IN_POOL in a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - state changing from ACCESSIBLE to IN_POOL in a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changed from ACCESSIBLE to IN_POOL in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changing from IN_POOL to CLOSED in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - state changing from IN_POOL to CLOSED in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changed from IN_POOL to CLOSED in a DualSessionWrapper in state CLOSED of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,393 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - session state changing to CLOSED, cleaning it up: a DualSessionWrapper in state CLOSED of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,397 [Receiving Thread] DEBUG bitronix.tm.resource.jms.JmsPooledConnection - DualSessionWrapper has been closed, 0 session(s) left open in pooled connection 2019-12-11 16:59:48,397 [Receiving Thread] DEBUG bitronix.tm.resource.jms.JmsPooledConnection - 0 session(s) open from a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,397 [Receiving Thread] DEBUG bitronix.tm.resource.jms.JmsPooledConnection - no session handle found in NOT_ACCESSIBLE state, creating new session 2019-12-11 16:59:48,397 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - getting session handle from a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,397 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 0 stateChangeEventListener(s) about state changing from IN_POOL to ACCESSIBLE in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,397 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - state changing from IN_POOL to ACCESSIBLE in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,397 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 0 stateChangeEventListener(s) about state changed from IN_POOL to ACCESSIBLE in a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,398 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - choosing XA session 2019-12-11 16:59:48,410 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - looking for producer based on a MessageProducerConsumerKey on ActiveMQQueue[sampleReplyQueue] 2019-12-11 16:59:48,410 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - found no producer based on a MessageProducerConsumerKey on ActiveMQQueue[sampleReplyQueue], creating it 2019-12-11 16:59:48,411 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - choosing XA session 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - closing a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - delisting a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 from a Bitronix Transaction with GTRID [31363035383232353635000000002582E13C00000001], status=ACTIVE, 1 resource(s) enlisted (started Thu Jan 08 12:18:54 IST 1970) 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - resource is not in enlisting global transaction context: a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - requeuing a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 from a Bitronix Transaction with GTRID [31363035383232353635000000002582E13C00000001], status=ACTIVE, 1 resource(s) enlisted (started Thu Jan 08 12:18:54 IST 1970) 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - resource is not in enlisting global transaction context: a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - looking in in-flight transactions for XAResourceHolderState of a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAResourceHolder - resource not enlisted in any transaction: a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.TransactionContextHelper - resource not in enlisting global transaction context, immediately releasing to pool a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changing from ACCESSIBLE to IN_POOL in a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - state changing from ACCESSIBLE to IN_POOL in a DualSessionWrapper in state ACCESSIBLE of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changed from ACCESSIBLE to IN_POOL in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changing from IN_POOL to CLOSED in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - state changing from IN_POOL to CLOSED in a DualSessionWrapper in state IN_POOL of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.common.AbstractXAStatefulHolder - notifying 2 stateChangeEventListener(s) about state changed from IN_POOL to CLOSED in a DualSessionWrapper in state CLOSED of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,447 [Receiving Thread] DEBUG bitronix.tm.resource.jms.DualSessionWrapper - session state changing to CLOSED, cleaning it up: a DualSessionWrapper in state CLOSED of a JmsPooledConnection of pool 1605822565-inboundtest-JMS in state ACCESSIBLE with underlying connection org.apache.activemq.artemis.jms.client.ActiveMQXAConnection@207dd1b7 2019-12-11 16:59:48,461 [Receiving Thread] DEBUG bitronix.tm.resource.jms.JmsPooledConnection - DualSessionWrapper has been closed, 0 session(s) left open in pooled connection

    opened by ponmanikandanb 7
  • Intermittent unit test failure with Oracle JDK7

    Intermittent unit test failure with Oracle JDK7

    (I'm not sure how BTM even builds with JDK7, due to MockDriver and MockXADataSource not implementing getParentLogger(). However...)

    I've run this several times with my changes to JdbcPooledConnection reverted (just to be sure), and there is an intermittent error in bitronix.tm.recovery.RecovererTest when built against JDK7. I have been unable to reproduce this when building against JDK5.

    Running bitronix.tm.recovery.RecovererTest Tests run: 9, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 6.838 sec <<< FAILURE! testBackgroundRecovererSkippingInFlightTransactions(bitronix.tm.recovery.RecovererTest) Time elapsed: 0.838 sec <<< FAILURE! junit.framework.AssertionFailedError: TX has been committed more or less times than just once expected:<1> but was:<2> at junit.framework.Assert.fail(Assert.java:47) at junit.framework.Assert.failNotEquals(Assert.java:283) at junit.framework.Assert.assertEquals(Assert.java:64) at junit.framework.Assert.assertEquals(Assert.java:195) at bitronix.tm.recovery.RecovererTest.testBackgroundRecovererSkippingInFlightTransactions(RecovererTest.java:360) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at junit.framework.TestCase.runTest(TestCase.java:168) at junit.framework.TestCase.runBare(TestCase.java:134) at junit.framework.TestResult$1.protect(TestResult.java:110) at junit.framework.TestResult.runProtected(TestResult.java:128) at junit.framework.TestResult.run(TestResult.java:113) at junit.framework.TestCase.run(TestCase.java:124) at junit.framework.TestSuite.runTest(TestSuite.java:243) at junit.framework.TestSuite.run(TestSuite.java:238) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

    opened by rankinc 7
  • Getting this error suddenly in one of tomcat instance

    Getting this error suddenly in one of tomcat instance

    I am not sure what caused below issue. I have two tomcat instances with the same configuration. but I am only seeing below issue in one of the instance.

    org.springframework.transaction.CannotCreateTransactionException: JTA failure on begin; nested exception is bitronix.tm.internal.BitronixSystemException: error logging status at org.springframework.transaction.jta.JtaTransactionManager.doBegin(JtaTransactionManager.java:845) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:427) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) at com.sun.proxy.$Proxy331.processPayment(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:817) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:731) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870) at javax.servlet.http.HttpServlet.service(HttpServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:120) at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:61) at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:95) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:724) Caused by: bitronix.tm.internal.BitronixSystemException: error logging status at bitronix.tm.BitronixTransaction.setStatus(BitronixTransaction.java:400) at bitronix.tm.BitronixTransaction.setStatus(BitronixTransaction.java:379) at bitronix.tm.BitronixTransaction.setActive(BitronixTransaction.java:367) at bitronix.tm.BitronixTransactionManager.begin(BitronixTransactionManager.java:126) at org.springframework.transaction.jta.JtaTransactionManager.doJtaBegin(JtaTransactionManager.java:875) at org.springframework.transaction.jta.JtaTransactionManager.doBegin(JtaTransactionManager.java:832) ... 70 more Caused by: bitronix.tm.journal.CorruptedTransactionLogException: corrupted log found at position 1246411 (no record terminator found) at bitronix.tm.journal.TransactionLogCursor.readLog(TransactionLogCursor.java:102) at bitronix.tm.journal.TransactionLogCursor.readLog(TransactionLogCursor.java:67) at bitronix.tm.journal.DiskJournal.collectDanglingRecords(DiskJournal.java:363) at bitronix.tm.journal.DiskJournal.copyDanglingRecords(DiskJournal.java:337) at bitronix.tm.journal.DiskJournal.swapJournalFiles(DiskJournal.java:300) at bitronix.tm.journal.DiskJournal.log(DiskJournal.java:101) at bitronix.tm.BitronixTransaction.setStatus(BitronixTransaction.java:389)

    opened by vka255 5
  • Why do resource recovery in ResourceRegistrar.register?

    Why do resource recovery in ResourceRegistrar.register?

    Simple (potentially dumb) question: why does the ResourceRegistrar.register() method attempt resource recovery if the transaction manager is already running?

    The reason I ask is the following: Our application fails to startup because of a single transaction causing a RecoveryException. This exception is raised when we try to register a resource with the transaction manager. At that point the transaction manager is already running because it was started using the Tomcat BTMLifecycleListener, and consequently ResourceRegistrar.register() attempts recovery:

    Caused by: bitronix.tm.recovery.RecoveryException: error recovering resource '1460720339996_3D_DOCCLE' due to an incompatible heuristic decision at bitronix.tm.recovery.IncrementalRecoverer.recover(IncrementalRecoverer.java:94) ~[btm-2.1.2.jar:2.1.2] at bitronix.tm.resource.ResourceRegistrar.register(ResourceRegistrar.java:78) ~[btm-2.1.2.jar:2.1.2] at grid.storage.transaction.btm.PoolingSessionFactory.buildXAPool(PoolingSessionFactory.java:68) ~[honeycomb-bitronix-1.8.23.jar:na] at grid.storage.transaction.btm.PoolingSessionFactory.init(PoolingSessionFactory.java:52) ~[honeycomb-bitronix-1.8.23.jar:na] ... 42 common frames omitted

    So because of this the application cannot register the resource with the transaction manager and of course needs to fail. It seems a bit harsh to prevent full application startup just because of a recovery failure on a single transaction. Is there a better way to handle this kind of issue?

    opened by klr8 5
  • Add new configuration option for JDBC4 connection test timeout.

    Add new configuration option for JDBC4 connection test timeout.

    Some databases (e.g. Oracle) can conceal multiple server nodes behind a single connection URL. So if we timeout while trying to connect to one node, we can still hope to connect to one of the other nodes. However, this assumes that the connection timeout is smaller than BTM's connection acquisition timeout.

    The JDBC4 isValid() connection test has its own timeout parameter; allow it to be configured independently.

    opened by rankinc 5
  • Cache leak fix

    Cache leak fix

    Put actual PreparedStatement objects in the LruStatementCache, instead of BTM-generated proxies. This fixes a memory leak where LruEvictionListener cannot close a statement when it is evicted from the cache.

    Also, proxies retrieved from the cache for reuse had their "pretendClosed" field set to "true", meaning that an apparently newly-minted PreparedStatement satified isClosed() == true.

    PreparedStatements were also being cached in a "dirty" state, with batches and warnings from their previous use still attached.

    opened by rankinc 5
  • Bump junit from 4.8.2 to 4.13.1

    Bump junit from 4.8.2 to 4.13.1

    Bumps junit from 4.8.2 to 4.13.1.

    Release notes

    Sourced from junit's releases.

    JUnit 4.13.1

    Please refer to the release notes for details.

    JUnit 4.13

    Please refer to the release notes for details.

    JUnit 4.13 RC 2

    Please refer to the release notes for details.

    JUnit 4.13 RC 1

    Please refer to the release notes for details.

    JUnit 4.13 Beta 3

    Please refer to the release notes for details.

    JUnit 4.13 Beta 2

    Please refer to the release notes for details.

    JUnit 4.13 Beta 1

    Please refer to the release notes for details.

    JUnit 4.12

    Please refer to the release notes for details.

    JUnit 4.12 Beta 3

    Please refer to the release notes for details.

    JUnit 4.12 Beta 2

    No release notes provided.

    JUnit 4.12 Beta 1

    No release notes provided.

    JUnit 4.11

    No release notes provided.

    Changelog

    Sourced from junit's changelog.

    Summary of changes in version 4.13.1

    Rules

    Security fix: TemporaryFolder now limits access to temporary folders on Java 1.7 or later

    A local information disclosure vulnerability in TemporaryFolder has been fixed. See the published security advisory for details.

    Test Runners

    [Pull request #1669:](junit-team/junit#1669) Make FrameworkField constructor public

    Prior to this change, custom runners could make FrameworkMethod instances, but not FrameworkField instances. This small change allows for both now, because FrameworkField's constructor has been promoted from package-private to public.

    Commits
    • 1b683f4 [maven-release-plugin] prepare release r4.13.1
    • ce6ce3a Draft 4.13.1 release notes
    • c29dd82 Change version to 4.13.1-SNAPSHOT
    • 1d17486 Add a link to assertThrows in exception testing
    • 543905d Use separate line for annotation in Javadoc
    • 510e906 Add sub headlines to class Javadoc
    • 610155b Merge pull request from GHSA-269g-pwp5-87pp
    • b6cfd1e Explicitly wrap float parameter for consistency (#1671)
    • a5d205c Fix GitHub link in FAQ (#1672)
    • 3a5c6b4 Deprecated since jdk9 replacing constructor instance of Double and Float (#1660)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Transaction Manager problem

    Transaction Manager problem

    I am using bitronix transaction manager inside mulesoft ( Custom Connector ). Inside the custom connector we have a connection to a ejb. When the mulesoft is terminated abruptly, the session is not destoryed and the transaction manager doesnt timeout still holding the ejb session,

    opened by Nikeshh 1
  • XAFactories which implement java.util.Map (MQXAConnectionFactory) cannot be initialized properly

    XAFactories which implement java.util.Map (MQXAConnectionFactory) cannot be initialized properly

    XAFactories which implements java.util.Map (for example com.ibm.mq.jms.MQXAConnectionFactory), cannot be initialized correctly by .properties configuration. Problem is in the function bitronix.tm.utils.PropertyUtils.setProperty where is

    if (currentTarget instanceof Map) { ... }
    else { setDirectProperty( ... ) }.
    

    The priority should be IMHO inverse. i.e.

    if the property exists then { setDirectProperty(...) } 
    else {
      if XAFactory is a map then {
          setup map and log warning about setting value in the Map.
      }
    }
    
    opened by tomasjura 3
  • Is it possible to release 3.x?

    Is it possible to release 3.x?

    It seems like this 3.x version already has some advantages over 2.x but the conversion was just never released. Perhaps, releasing this "ported" version would re-invigorate the community.

    opened by nniesen 0
  • Extended Spring Tests, Added CDI-Support

    Extended Spring Tests, Added CDI-Support

    I am thinking about including a JTA-Transactionmanager in the project ejb-cdi-unit, that is a framework to create a ejb-test-environment solely based on Weld-SE.

    • To understand how this works in spring, an extension of the spring-module-tests has been done using H2.
    • To support Weld-SE, an integration of bitronix-tm into CDI, similar to the integration into spring was created as extra module.
    • Nothing has been changed at the implementation of the bitronix TM.
    • Deactivated travis-tests in jdk7 and jdk6.
    opened by aschoerk 0
  • Support custom XAResourceProducer implementations in ResourceLoader

    Support custom XAResourceProducer implementations in ResourceLoader

    The ResourceLoader is hard-coded to support two types of XAResourceProducer implementations: the PoolingDataSource for a JDBC XADataSource and the PoolingConnectionFactory for a JMX XAConnectionFactory.

    We have our own custom XAResourceProducer implementations and currently we need to manually register them with the transaction manager (ResourceRegistrar). This is inconvenient.

    I would like to request the ResourceLoader be enhanced to support custom XAResourceProducer implementations. Maybe it can recognize a "resource.name.producerClassName" property in the properties file and if (optionally) specified use that?

    enhancement 
    opened by klr8 1
Owner
Bitronix Open Source Software
Bitronix Open Source Software
Financial-level flexible distributed transaction solution

Financial-level flexible distributed transaction solution

dromara 3.9k Dec 30, 2022
A strongly consistent distributed transaction framework

A strongly consistent distributed transaction framework

dromara 1.9k Jan 3, 2023
:fire: Seata is an easy-to-use, high-performance, open source distributed transaction solution.

Seata: Simple Extensible Autonomous Transaction Architecture What is Seata? A distributed transaction solution with high performance and ease of use f

Seata 23.2k Jan 2, 2023
Financial-level flexible distributed transaction solution

Financial-level flexible distributed transaction solution

dromara 3.9k Dec 30, 2022
A strongly consistent distributed transaction framework

A strongly consistent distributed transaction framework

dromara 1.9k Jan 3, 2023
Bukkit transaction API for predicting when a server packet arrives at a client. Mainly intended for use in Minecraft anticheats.

Pledge A high performance and lightweight Bukkit packet tracking API for predicting when a server packet arrives at a client using transactions. Mainl

Thomazz 32 Dec 1, 2022
This project shows how to configure basic auth to secure our rest API and basic transaction on Data JPA

Basic Atuthentication Spring Boot Data JPA, MySQL This project shows how to configure basic auth to secure our rest API and basic transaction on Data

Hafizullah Samim 1 Feb 10, 2022
(cross-platform) Java Version Manager

jabba Java Version Manager inspired by nvm (Node.js). Written in Go. The goal is to provide unified pain-free experience of installing (and switching

Stanley Shyiko 2.5k Jan 9, 2023
Undo manager for JavaFX

This project is no longer being maintained. See this issue for more details. UndoFX UndoFX is a general-purpose undo manager for JavaFX (or Java appli

null 89 Oct 9, 2022
Android Resource Manager application to manage and analysis your app resources with many features like image resize, Color, Dimens and code Analysis

AndroidResourceManager Cross-Platform tools to manage your resources as an Android Developer, AndroidResourceManager - ARM provide five main services

Amr Hesham 26 Nov 16, 2022
A Minecraft DM manager

Livemessage Check out the trailer video here! Livemessage is a client-sided DM manager for Minecraft 1.12.2. It is inspired by older chat applications

Jasper Rebane 69 Aug 21, 2022
Simple yet effective password manager.

Password Manager By Edric Antoine This application provides a convenient way to store usernames and passwords for sites you visit. It will include fun

null 1 Jan 5, 2022
The Download Manager uses a simple yet effective GUI interface built with java’s Swing libraries

The Download Manager uses a simple yet effective GUI interface built with java’s Swing libraries.The use of Swing gives the interface a crisp, modern look and feel. The GUI maintains a list of downloads that are currently being managed.

Manish Kumar Mahawar 2 Jan 2, 2022
Apache Mesos is a cluster manager that provides efficient resource isolation and sharing across distributed applications, or frameworks

Apache Mesos is a cluster manager that provides efficient resource isolation and sharing across distributed applications, or frameworks. It can run Hadoop, Jenkins, Spark, Aurora, and other frameworks on a dynamically shared pool of nodes.

The Apache Software Foundation 5k Dec 31, 2022
Example usage of work manager in Android, while doing this study, image downloading was preferred as a method.

android-workmanager-example Example usage of work manager in Android, while doing this study, image downloading was preferred as a method. Java 11 com

Adil Çetin 1 Jan 29, 2022
Simple Minecraft Tab Completer Manager

BrigadierManager Simple and light open-source plugin to manage the Minecraft tab completer commands. Usage: /brigadier <option> [command] Option Descr

carlodrift 0 Dec 15, 2022
A GUI-based file manager based on a Java file management and I/O framework using object-oriented programming ideas.

FileManager A GUI-based file manager based on a Java file management and I/O framework using object-oriented programming ideas. Enables folder creatio

Zongyu Wu 4 Feb 7, 2022
Cluster manager for Apache Doris

Apache Doris (incubating) Manager The repository contains Manager for Apache Doris (incubating) License Apache License, Version 2.0 Report issues or s

The Apache Software Foundation 96 Jan 4, 2023
The most reliable world manager you've ever seen.

Rift2 - The Opening Electric Boogaloo The most reliable world manager you've ever seen. Contributors & creators: Cyberpwn Vatuu Psycho If you want to

Volmit Software 9 Dec 2, 2022
The Minecraft Mod Package Manager!

Modget-Minecraft The Minecraft Mod Package Manager! Modget is based on TheBrokenRail's ModUpdater mod and is inspired heavily by Microsoft's Winget. C

null 49 Dec 28, 2022