Kodo EntityManagers and 
		PersistenceManagers have the ability 
		to automatically synchronize their transactions with an external 
		transaction manager.  Whether or not 
		EntityManagers and 
		PersistenceManagers from a given factory exhibit this 
		behavior by default depends on the 
		kodo.TransactionMode configuration property.
        (Under JPA, Kodo translates the transaction type you set for the 
        persistence unit in your persistence.xml file into
        a value for this property).
		The kodo.TransactionMode property accepts the 
        following values:
		
				local: Perform transaction operations
				locally.
				
				managed: Integrate with the application
				server's managed global transactions.  
				
		You can override the global transaction mode setting when you obtain an
		EntityManager using the 
		
		EntityManagerFactory's
		createEntityManager(Map props) method by
        setting the kodo.TransactionMode key of the given
        Map to the desired value.
		
![]()  | Note | 
|---|---|
You can also override the   | 
		You can override the global transaction mode setting when you obtain a 
		PersistenceManager using the 
		
		KodoPersistenceManagerFactory's
		getPersistenceManager(boolean managed, int connRetainMode)
		 method.
		
		
		In order to use global transactions, Kodo must be able to access
		the application server's javax.transaction.TransactionManager
		.  Kodo can automatically discover the transaction
		manager for most major application servers.  Occasionally, however, 
		you might have to point Kodo to the transaction manager for an 
		unrecognized or non-standard application server setup.  This is 
		accomplished through the 
		kodo.ManagedRuntime configuration property.  This
		property describes a 
		
		kodo.ee.ManagedRuntime implementation to use
		for transaction manager discovery.  You can specify your own 
		implementation, or use one of the built-ins:
		
				auto: This is the default.  It is an alias 
				for the
				
				kodo.ee.AutomaticManagedRuntime
				class.  This managed runtime is able to automatically integrate
				with several common application servers.
				
				invocation: An alias for the
				
				kodo.ee.InvocationManagedRuntime
				class.  You can configure this runtime to invoke any static
				method in order to obtain the appserver's transaction manager.
				
				jndi: An alias for the
				
				kodo.ee.JNDIManagedRuntime
				class.  You can configure this runtime to look up the
				transaction manager at any JNDI location.
				
See the Javadoc for of each class for details on the bean properties you can pass to these plugins in your configuration string.
![]()  | Important | 
|---|---|
This feature requires Kodo Enterprise Edition.  | 
Example 8.3. Configuring Transaction Manager Integration
JPA XML format:
<property name="kodo.TransactionMode" value="managed"/> <property name="kodo.ManagedRuntime" value="jndi(TransactionManagerName=java:/TransactionManager)"/>
JDO properties format:
kodo.TransactionMode: managed kodo.ManagedRuntime: jndi(TransactionManagerName=java:/TransactionManager)
Note that even when Kodo is using managed transaction, you can control transactions through the specification local transaction APIs if you wish. Kodo will propagate your transaction calls to the global transaction.