Seems that tie Apache Tomcat with Bitronix JTA provider + Hibernate 3.6.3 and Spring 3.2.5 + some JEE stuff works just fine. To FIX UP:
1. tests for prove
2. rewrite for Spring container (move btm jars from server side to web-application side, refine applicationContext.xml content, solve classloader and jar-content intercestion, polish it )

WAYS:
1. intergate Bitronix 2.1.3 with Apache Tomcat 6.0.37
	jeronimo-jta 1.1
	tomcat-lifecycle-2.1.3
	slf4j-1.6.4

btm-config.properties under $CATALINA_HOME/conf

	#bitronix.tm.jndi.userTransactionName=btmUserTransaction
	bitronix.tm.serverId=tomcat-btm-node0
	bitronix.tm.journal.disk.logPart1Filename=${btm.root}/work/btm1.tlog
	bitronix.tm.journal.disk.logPart2Filename=${btm.root}/work/btm2.tlog
	bitronix.tm.resource.configuration=${btm.root}/conf/resources.properties
	
resources.properties under $CATALINA_HOME/conf

resource.mds.className=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
resource.mds.uniqueName=jdbc/enterpriseDS
resource.mds.minPoolSize=4
resource.mds.maxPoolSize=32
resource.mds.testQuery=SELECT 1 FROM reports
resource.mds.driverProperties.databaseName=enterpirse
resource.mds.driverProperties.user=netbeans
resource.mds.driverProperties.password=netbeans
resource.mds.driverProperties.URL=jdbc:mysql://localhost:3306/enterprise?autoReconnect=true

resource.mds2.className=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
resource.mds2.uniqueName=jdbc/registryDS
resource.mds2.minPoolSize=4
resource.mds2.maxPoolSize=32
resource.mds2.testQuery=SELECT 1 FROM registers
resource.mds2.driverProperties.databaseName=registry
resource.mds2.driverProperties.user=netbeans
resource.mds2.driverProperties.password=netbeans
resource.mds2.driverProperties.URL=jdbc:mysql://localhost:3306/registry?autoReconnect=true

2. ehcache.xml under WEB-INF/classes

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="false"
         monitoring="off" 
         dynamicConfig="false"
         maxBytesLocalHeap="128M"
         maxBytesLocalOffHeap="512M"
         maxBytesLocalDisk="1G"    
         name="enterpriseCacheManager">
    
    <diskStore path="java.io.tmpdir" />
    
    <defaultCache
        maxElementsInMemory="10000"     
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="360"
        overflowToDisk="false"
        memoryStoreEvictionPolicy="LRU"
    />
    
    <!-- entity caches -->
    <cache name="enterprise.hibernate.Report"
           maxBytesLocalHeap="64M"
           maxBytesLocalOffHeap="256M"
           maxBytesLocalDisk="512M"
           eternal="true"
           diskSpoolBufferSizeMB="32"
           timeToIdleSeconds="0"
           timeToLiveSeconds="0"
           memoryStoreEvictionPolicy="LFU">
        <persistence strategy="localTempSwap" synchronousWrites="false"/>
    </cache>
    
    <!-- hibernate query caches -->
    <cache name="org.hibernate.cache.StandardQueryCache"
           maxBytesLocalHeap="32M"
           maxBytesLocalOffHeap="128M"
           maxBytesLocalDisk="256M"
           eternal="false" 
           timeToIdleSeconds="3600"
           timeToLiveSeconds="3600"
           memoryStoreEvictionPolicy="FIFO">
        <persistence strategy="localTempSwap" synchronousWrites="false"/>
    </cache>

    <!-- for hibernate first-level cache -->
    <cache name="org.hibernate.cache.UpdateTimestampsCache"
           maxBytesLocalHeap="32M"
           maxBytesLocalOffHeap="128M"
           overflowToOffHeap="true"
           eternal="true">
    </cache>

</ehcache>

3. c3p0.properties under WEB-INF/classes

# c3p0 connection pool settings / under WEB-INF/classes folder
c3p0.maxPoolSize=64
c3p0.minPoolSize=8
c3p0.acquireIncrement=4
c3p0.numHelperThreads=8
c3p0.acquireRetryAttempts=5
c3p0.acquireRetryDelay=60
c3p0.maxStatements=256
c3p0.checkoutTimeout=8
c3p0.maxIdleTime=86400
c3p0.maxIdleTimeExcessConnections=3600
c3p0.preferredTestQuery=SELECT 1
c3p0.initialPoolSize=4

# disable MBean creation
com.mchange.v2.c3p0.management.ManagementCoordinator=com.mchange.v2.c3p0.management.NullManagementCoordinator
# disable debug 
c3p0.debugUnreturnedConnectionStackTraces=false
# logging
# com.mchange.v2.log.MLog=com.mchange.v2.log.log4j.Log4jMLog
# loging per package
# com.mchange.v2.log.NameTransformer=com.mchange.v2.log.PackageNames

# debugUnreturnedConnectionStackTraces
# unreturnedConnectionTimeout


4. enterprise.cfg.xml under /enterprise/hibernate

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.datasource">java:comp/env/jdbc/enterpriseDS</property>
    <!-- JNDI context for a datasource lookup -->
    <property name="hibernate.jndi.class">bitronix.tm.jndi.BitronixInitialContextFactory</property>
    <!-- cache options -->
    <!--        <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.use_query_cache">true</property>
        <property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>
        <property name="hibernate.cache.use_structured_entries">true</property>-->
    <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <!-- FIXME replace with JTA -->
    <property name="hibernate.transaction.manager_lookup_class">enterprise.util.EnterpriseBTMTransactionManagerLookup2</property>
    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
    <property name="hibernate.current_session_context_class">jta</property>
    <property name="hibernate.transaction.auto_close_session">true</property>
    <!-- using with Spring 
        <property name="hibernate.session_factory_name"></property> 
        -->
    <!-- transaction options -->
    <!-- 
       <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
       <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.TransationManagerLookupFactory</property>
        -->
    <!-- in Spring 
        <prop key="hibernate.cache.use_second_level_cache">true</prop>
        <prop key="hibernate.cache.use_query_cache">true</prop>
        <prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop>
        -->
    <!-- FIXME
        <property name="hibernate.connection.isolation"></property> 
        -->
    <!-- common settings -->
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="hibernate.use_sql_comments">true</property>
    <property name="hibernate.generate_statistics">true</property>
    <!-- mappings -->
    <mapping class="enterprise.hibernate.Report"/>
  </session-factory>
</hibernate-configuration>

5. registry.cfg.xml under /registry/hibernate

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.datasource">java:comp/env/jdbc/registryDS</property>
    <property name="hibernate.connection.release_mode">after_transaction</property>
    <!-- JNDI context for a datasource lookup -->
    <!--<property name="hibernate.jndi.class">bitronix.tm.jndi.BitronixInitialContextFactory</property>-->
    <!-- cache options -->
    <!--        <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.use_query_cache">true</property>
        <property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>
        <property name="hibernate.cache.use_structured_entries">true</property>-->
    <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <!-- FIXME replace with JTA -->
    <property name="hibernate.transaction.manager_lookup_class">enterprise.util.EnterpriseBTMTransactionManagerLookup2</property>
    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
    <property name="hibernate.current_session_context_class">jta</property>
    <property name="hibernate.transaction.auto_close_session">true</property>
    <!-- using with Spring 
        <property name="hibernate.session_factory_name"></property> 
        -->
    <!-- transaction options -->
    <!-- 
       <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
       <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.TransationManagerLookupFactory</property>
        -->
    <!-- in Spring 
        <prop key="hibernate.cache.use_second_level_cache">true</prop>
        <prop key="hibernate.cache.use_query_cache">true</prop>
        <prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop>
        -->
    <!-- FIXME
        <property name="hibernate.connection.isolation"></property> 
        -->
    <!-- common settings -->
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="hibernate.use_sql_comments">true</property>
    <property name="hibernate.generate_statistics">true</property>
    <!-- mappings -->
    <mapping class="registry.hibernate.Ops"/>
    <mapping class="registry.hibernate.RegistersId"/>
    <mapping class="registry.hibernate.Registers"/>
    <mapping class="registry.hibernate.Users"/>
  </session-factory>
</hibernate-configuration>

PATTERNS:
1. Lazy Initialization (FETCH_TYPE.LAZY)
2. OpenSessionInView (Servlet Filter, TODO: Spring Way)
3. JTA : transaction-per-request, session-per-transaction(JTA)
4. connection pooling, connection XA pooling, hibernate caching (heap, offheap, disk)
5. DAO access (TODO: implement convenient DAO classes)

Technologies:
C3P0, Ehcache, BigMemory Go, Hibernate, Spring, Tomcat, Bitronix, 

APIs:
Servlet API, JTA API, JDBC API, slf4j

TODO: REST, JMS. JSON