[JBoss Cache] - TreeCache error after Hibernate sessionFacotry close
by Eranga Samararathna
Eranga Samararathna [https://community.jboss.org/people/erangac] created the discussion
"TreeCache error after Hibernate sessionFacotry close"
To view the discussion, visit: https://community.jboss.org/message/724584#724584
--------------------------------------------------------------
I am using a Hibernate 3.1.13 with jboss-cache 3.2.5
I'm running my application with second level caching enabled and in middle of the application (based on user operation ) I am closing the existing session factory (sessionFactory.close();) and create a new one.
Up to this moment my second level cache work fine and after closing and creating new session factory I am getting following error from the Treecache.
Error
================================================
Caused by: org.jboss.cache.CacheException: java.lang.reflect.InvocationTargetException
at org.jboss.cache.util.reflect.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:148)
at org.jboss.cache.factories.ComponentRegistry$PrioritizedMethod.invoke(ComponentRegistry.java:1012)
at org.jboss.cache.factories.ComponentRegistry.internalStart(ComponentRegistry.java:778)
at org.jboss.cache.factories.ComponentRegistry.start(ComponentRegistry.java:632)
at org.jboss.cache.invocation.CacheInvocationDelegate.start(CacheInvocationDelegate.java:345)
at org.hibernate.cache.jbc2.builder.SharedCacheInstanceManager.start(SharedCacheInstanceManager.java:155)
at org.hibernate.cache.jbc2.JBossCacheRegionFactory.start(JBossCacheRegionFactory.java:106)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:192)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1304)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at com.valista.rse.server.SessionFactoryHolder.refreshSessionFactory(SessionFactoryHolder.java:102)
... 32 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.cache.util.reflect.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:144)
... 44 more
Caused by: org.jboss.cache.CacheException: Unable to fetch state on startup
at org.jboss.cache.RPCManagerImpl.start(RPCManagerImpl.java:385)
... 49 more
Caused by: org.jboss.cache.CacheException: Cache instance at 127.0.0.1:47082 cannot integrate state since state provider could not provide state due to null
at org.jboss.cache.statetransfer.DefaultStateTransferManager.setState(DefaultStateTransferManager.java:169)
at org.jboss.cache.remoting.jgroups.ChannelMessageListener.setState(ChannelMessageListener.java:191)
at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.handleUpEvent(MessageDispatcher.java:665)
at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:765)
at org.jgroups.JChannel.up(JChannel.java:1183)
at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:444)
at org.jgroups.protocols.pbcast.STATE_TRANSFER.handleStateRsp(STATE_TRANSFER.java:421)
at org.jgroups.protocols.pbcast.STATE_TRANSFER.up(STATE_TRANSFER.java:120)
at org.jgroups.protocols.pbcast.GMS.up(GMS.java:787)
at org.jgroups.protocols.FRAG.unfragment(FRAG.java:290)
at org.jgroups.protocols.FRAG.up(FRAG.java:150)
at org.jgroups.protocols.UNICAST.handleDataReceived(UNICAST.java:616)
at org.jgroups.protocols.UNICAST.up(UNICAST.java:282)
at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:233)
at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:735)
at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:167)
at org.jgroups.protocols.FD.up(FD.java:284)
at org.jgroups.protocols.MERGE2.up(MERGE2.java:144)
at org.jgroups.protocols.Discovery.up(Discovery.java:263)
at org.jgroups.protocols.TP.passMessageUp(TP.java:1275)
at org.jgroups.protocols.TP.access$100(TP.java:49)
at org.jgroups.protocols.TP$IncomingPacket.handleMyMessage(TP.java:1818)
at org.jgroups.protocols.TP$IncomingPacket.run(TP.java:1797)
... 3 more
My treecache configuration file
================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- Sample TreeCache Service Configuration -->
<!-- -->
<!-- ===================================================================== -->
<server>
<classpath codebase="../lib" archives="jbosscache-core.jar, jgroups.jar"/>
<!-- ==================================================================== -->
<!-- Defines TreeCache configuration -->
<!-- ==================================================================== -->
<mbean code="org.jboss.cache.TreeCache"
name="jboss.cache:service=TreeCache">
<depends>jboss:service=Naming</depends>
<!-- <depends>jboss:service=TransactionManager</depends>
TransactionManager configuration not required for Hibernate!
-->
<!--
Node isolation level : SERIALIZABLE
REPEATABLE_READ (default)
READ_COMMITTED
READ_UNCOMMITTED
NONE
-->
<attribute name="IsolationLevel">READ_COMMITTED</attribute>
<!--
Valid modes are LOCAL
REPL_ASYNC
REPL_SYNC
-->
<attribute name="CacheMode">REPL_SYNC</attribute>
<!-- Name of cluster. Needs to be the same for all clusters, in order
to find each other
-->
<attribute name="ClusterName">TreeCache-Cluster</attribute>
<!-- JGroups protocol stack properties. Can also be a URL,
e.g. file:/home/bela/default.xml
<attribute name="ClusterProperties"></attribute>
-->
<attribute name="ClusterConfig">
<config>
UDP: if you have a multihomed machine,
set the bind_addr attribute to the appropriate NIC IP address
UDP: On Windows machines, because of the media sense feature
being broken with multicast (even after disabling media sense)
set the loopback attribute to true
<UDP mcast_addr="228.1.2.3" mcast_port="45566" bind_addr="127.0.0.1"
ip_ttl="64" ip_mcast="true"
mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
loopback="false"/>
<PING timeout="2000" num_initial_members="3"
up_thread="false" down_thread="false"/>
<MERGE2 min_interval="10000" max_interval="20000"/>
<FD shun="true" up_thread="true" down_thread="true"/>
<VERIFY_SUSPECT timeout="1500"
up_thread="false" down_thread="false"/>
<pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
up_thread="false" down_thread="false"/>
<pbcast.STABLE desired_avg_gossip="20000"
up_thread="false" down_thread="false"/>
<UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
down_thread="false"/>
<FRAG frag_size="8192"
down_thread="false" up_thread="false"/>
<pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
shun="true" print_local_addr="false"/>
<pbcast.STATE_TRANSFER up_thread="false" down_thread="false"/>
</config>
</attribute>
<!--
Max number of entries in the cache. If this is exceeded, the
eviction policy will kick some entries out in order to make
more room
-->
<attribute name="MaxCapacity">20000</attribute>
<!--
The max amount of time (in milliseconds) we wait until the
initial state (ie. the contents of the cache) are retrieved from
existing members in a clustered environment
-->
<attribute name="InitialStateRetrievalTimeout">20000</attribute>
<!--
Number of milliseconds to wait until all responses for a
synchronous call have been received.
-->
<attribute name="SyncReplTimeout">10000</attribute>
<!-- Max number of milliseconds to wait for a lock acquisition -->
<attribute name="LockAcquisitionTimeout">15000</attribute>
<!-- Max number of milliseconds we hold a lock (not currently
implemented) -->
<attribute name="LockLeaseTimeout">60000</attribute>
<!-- Name of the eviction policy class. Not supported now. -->
<attribute name="EvictionPolicyClass"></attribute>
</mbean>
</server>
My Hibernate configuration file
=================================
# hibernate properties (general settings)
# Note: Define C3P0 settings in c3p0.properties, NOT in this file.
# Debugging
hibernate.show_sql=false
#hibernate.cglib.use_reflection_optimizer=false
# Database isolation 1=read uncommitted, 2=read committed, 4=repeatable read, 8=serializable
hibernate.connection.isolation = 2
#configurations for jboss-cache as second level cache
hibernate.cache.use_second_level_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.jbc2.SharedJBossCacheRegionFactory
hibernate.cache.region.jbc2.cfg.shared=treecache.xml
hibernate.cache.use_query_cache=false
# Filtered values based on db type
hibernate.connection.url=(a)db.url@
hibernate.connection.username=(a)db.users.owner.username@
hibernate.connection.password=(a)db.users.owner.password@
hibernate.database.startup.enabled=(a)db.startup.enabled@
db.type=(a)db.type@
hibernate.generate_statistics=true
Appreciate you people help on this matter
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/724584#724584]
Start a new discussion in JBoss Cache at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
12 years, 3 months
[jBPM] - Separating JBPM 5.1 Process persistence from workitemhandler business logic transaction
by lakshmi sampath
lakshmi sampath [https://community.jboss.org/people/lakshmi.sampath] created the discussion
"Separating JBPM 5.1 Process persistence from workitemhandler business logic transaction"
To view the discussion, visit: https://community.jboss.org/message/724547#724547
--------------------------------------------------------------
Hi,
I am persisting the knowledge session using JPA/JTA and I need to separate jbpm process related persistence from business logic persistence so that when I use asynchronous service work item handlers to call the business logic
and if the business logic fails and rollbacks a transaction, I still want the process related information, history log and mainly the asynchronous work item to be persisted.
Here's the exception thrown when JBPM tries to commit the asynchnous work item after the business logic called inside a workitem rollbacks a transaction.
1. How do I make sure that JBPM uses a separate transaction always and not share it with the business logic transaction.
2. Even if JBPM uses separate transaction, does it also rollback if business logic transaction rollbacks since they are part of same JTA User Transaction(Which I dont want JBPM to do).
Note: Both JBPM persistence and business logic share the same database and datasource.
2012-03-17 17:30:31,032 WARN [org.drools.persistence.jta.JtaTransactionManager] Unable to commit transaction
javax.transaction.RollbackException: [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Can't commit because the transaction is in aborted state
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1394)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87)
at org.jboss.tm.usertx.client.ServerVMClientUserTransaction.commit(ServerVMClientUserTransaction.java:140)
at org.drools.persistence.jta.JtaTransactionManager.commit(JtaTransactionManager.java:167)
at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:294)
at org.drools.command.impl.CommandBasedStatefulKnowledgeSession.startProcessInstance(CommandBasedStatefulKnowledgeSession.java:237)
at com.hp.adam.processengine.impl.JBPMProcessEngine.startProcess(JBPMProcessEngine.java:35)
...
Caused by: java.lang.IllegalStateException: BaseTransaction.rollback - [com.arjuna.ats.internal.jta.transaction.arjunacore.notx] [com.arjuna.ats.internal.jta.transaction.arjunacore.notx] no transaction!
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.rollback(BaseTransaction.java:158)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.rollback(BaseTransactionManagerDelegate.java:126)
at org.jboss.tm.usertx.client.ServerVMClientUserTransaction.rollback(ServerVMClientUserTransaction.java:148)
at org.drools.persistence.jta.JtaTransactionManager.rollback(JtaTransactionManager.java:183)
... 21 more
Here's how I am configuring and starting the process. Note that I autowire spring to retrieve transaction manager,
primarily to get hold of UserTransaction object instead of lookup from JNDI.
---------------------------------------------------------------------------------------------------------------------------------------------------------
*@Autowired*
*org.springframework.transaction.jta.JtaTransactionManager txm;*
...
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbase=kbuilder.newKnowledgeBase();
kbuilder.add(ResourceFactory.newClassPathResource("bpmn2Process.bpmn"), ResourceType.BPMN2);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
env.set(EnvironmentName.TRANSACTION, *txm.getUserTransaction()*);
StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase,null,env);
ksession.getWorkItemManager().registerWorkItemHandler("ServiceWorkItem", (WorkItemHandler)object);
JPAWorkingMemoryDbLogger processDbLogger = new JPAWorkingMemoryDbLogger(ksession);
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Also attached the persistence.xml file
thanks
lakshmi.
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/724547#724547]
Start a new discussion in jBPM at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
12 years, 3 months