[JBoss Cache: Core Edition] - Re: tx aware cache config issue
by emmartins
|
| public void begin() throws SystemException {
|
| Transaction tx = getTransaction();
|
| // check there is no transaction
| if (tx != null) {
| throw new SystemException("Transaction already started, cannot nest tx. Ongoing Tx: "+ tx);
| }
|
| // begin transaction
| try {
| transactionManager.begin();
| } catch (NotSupportedException e) {
| throw new SystemException("Failed to begin transaction." + e);
| }
|
| tx = getTransaction();
|
| if (logger.isDebugEnabled()) {
| logger.debug("Transaction started: "+tx);
| }
|
| // register for call-backs
| try {
| tx.registerSynchronization(new SynchronizationHandler(tx));
| } catch (RollbackException e) {
| throw new SystemException("Unable to register listener for created transaction. Error: "+e.getMessage());
| }
| }
|
| public void commit() throws SystemException {
|
| Transaction tx = getTransaction();
|
| if (tx == null) {
| throw new SystemException(
| "Failed to commit transaction since there is no transaction to commit!");
| }
|
| if (getRollbackOnly()) {
| if (logger.isDebugEnabled())
| logger
| .debug("Transaction marked for roll back, cannot commit, ending with rollback: "
| + tx);
| rollback();
| } else if (tx.getStatus() == Status.STATUS_ACTIVE) {
| try {
| transactionManager.commit();
| if (logger.isDebugEnabled())
| logger.debug("Committed tx "+tx);
| } catch (Exception e) {
| throw new SystemException("Failed to commit tx " + tx + ". Error: "
| + e.getMessage());
| }
| } else {
| throw new SystemException(
| "Failed to commit transaction "+tx+" since state is "
| + tx.getStatus());
| }
| }
|
|
| public boolean getRollbackOnly() throws SystemException {
|
| Transaction tx = getTransaction();
|
| if (tx == null) {
| throw new SystemException("no transaction");
| }
|
| return tx.getStatus() == Status.STATUS_MARKED_ROLLBACK;
| }
|
| public Transaction getTransaction() {
|
| if (transactionManager != null) {
| try {
| return transactionManager.getTransaction();
| } catch (SystemException e) {
| throw new RuntimeException(
| "Failed to obtain active JTA transaction");
| }
| }
| else {
| throw new RuntimeException("tx manager unavailable");
| }
| }
|
|
| public void rollback() throws SystemException {
|
| Transaction tx = getTransaction();
|
| if (tx == null) {
| throw new SystemException(
| "Failed to rollback transaction since there is no transaction to rollback!");
| }
|
| if (!((tx.getStatus() != Status.STATUS_ACTIVE) || (tx.getStatus() != Status.STATUS_MARKED_ROLLBACK))) {
| throw new SystemException(
| "Failed to rollback transaction since transaction is in state: "
| + tx.getStatus());
| }
|
| transactionManager.rollback();
|
| if (logger.isDebugEnabled()) {
| logger.debug("Rollbacked tx "+tx);
| }
| }
|
| public void setRollbackOnly() throws SystemException {
|
| if (transactionManager != null) {
| transactionManager.setRollbackOnly();
| if (logger.isDebugEnabled())
| logger.debug("rollbackonly set on tx "
| + getTransaction());
| }
| else {
| throw new SystemException("tx manager unavailable");
| }
| }
|
|
The methods just delegate to JTA Tx Manager, in this case the RealTransactionManager bean from JBossAS 5.
Debug logs with 3.0.2.GA:
| 13:39:46,655 DEBUG [InterceptorChain] Interceptor chain is: InterceptorChain{
| >> org.jboss.cache.interceptors.CallInterceptor
| >> org.jboss.cache.interceptors.MVCCLockingInterceptor
| >> org.jboss.cache.interceptors.NotificationInterceptor
| >> org.jboss.cache.interceptors.TxInterceptor
| >> org.jboss.cache.interceptors.CacheMgmtInterceptor
| >> org.jboss.cache.interceptors.InvocationContextInterceptor
| }
| 13:39:46,655 DEBUG [RegionManagerImpl] Not using an EvictionPolicy
| 13:39:46,679 DEBUG [VersionAwareMarshaller] Started with version 3.0.2 and versionInt 30
| 13:39:46,679 DEBUG [VersionAwareMarshaller] Using default marshaller class class org.jboss.cache.marshall.CacheMarshaller300
| 13:39:46,679 DEBUG [DataContainerImpl] Setting rootInternal to UnversionedNode[ /]
| 13:39:46,707 DEBUG [JmxRegistrationManager] Base name is: jboss.cache:service=JBossCache,uniqueId=69b249
| 13:39:46,735 INFO [PlatformMBeanServerRegistration] JBossCache MBeans were successfully registered to the platform mbean server.
| 13:39:46,737 DEBUG [RPCManagerImpl] cache mode is local, will not create the channel
| 13:39:46,737 INFO [ComponentRegistry] JBoss Cache version: JBossCache 'Naga' 3.0.2.GA
| 13:39:46,761 DEBUG [SleeTransactionManagerImpl] Transaction started: TransactionImple < ac, BasicAction: -53e0fec0:d852:4977259f:9 status: ActionStatus.RUNNING >
| 13:39:46,764 DEBUG [SleeTransactionManagerImpl] rollbackonly set on tx TransactionImple < ac, BasicAction: -53e0fec0:d852:4977259f:9 status: ActionStatus.ABORT_ONLY >
| 13:39:46,772 DEBUG [SleeTransactionManagerImpl] Transaction marked for roll back, cannot commit, ending with rollback: TransactionImple < ac, BasicAction: -53e0fec0:d852:4977259f:9 status: ActionStatus.ABORT_ONLY >
| 13:39:46,773 DEBUG [SleeTransactionManagerImpl] Rollbacked tx TransactionImple < ac, BasicAction: -53e0fec0:d852:4977259f:9 status: ActionStatus.ABORTED >
| 13:39:46,773 DEBUG [SleeTransactionManagerImpl] Transaction started: TransactionImple < ac, BasicAction: -53e0fec0:d852:4977259f:b status: ActionStatus.RUNNING >
| 13:39:46,786 INFO [SleeTransactionManagerImpl] BIGGGGGGGGGGGGGGG ISSSSSSSSSSSSSSSSSSSSUEEEEEEEEEE
| 13:39:46,787 DEBUG [SleeTransactionManagerImpl] beforeCompletion for tx TransactionImple < ac, BasicAction: -53e0fec0:d852:4977259f:b status: ActionStatus.RUNNING >
| 13:39:46,787 DEBUG [SleeTransactionManagerImpl] Committed tx TransactionImple < ac, BasicAction: -53e0fec0:d852:4977259f:b status: ActionStatus.COMMITTED >
|
Another failing similar scenario:
| Fqn fqn = Fqn.fromElements("short test");
| Object key = new Object();
| Object value = new Object();
| try {
| begin();
| cache.getRoot().addChild(fqn);
| commit();
| begin();
| setRollbackOnly();
| cache.getRoot().getChild(fqn).put(key, value);
| rollback();
| begin();
| if (cache.getRoot().getChild(fqn).get(key) != null) {
| logger.info("BIGGGGGGGGGGGGGGG ISSSSSSSSSSSSSSSSSSSSUEEEEEEEEEE");
| }
| commit();
| }
| catch (Exception e) {
| logger.error(e.getMessage(),e);
| }
|
And its debug logs with 3.0.2.GA:
| 13:54:48,123 DEBUG [DataContainerImpl] Setting rootInternal to NodeReference{delegate=UnversionedNode[ /]}
| 13:54:48,149 DEBUG [InterceptorChain] Interceptor chain is: InterceptorChain{
| >> org.jboss.cache.interceptors.CallInterceptor
| >> org.jboss.cache.interceptors.MVCCLockingInterceptor
| >> org.jboss.cache.interceptors.NotificationInterceptor
| >> org.jboss.cache.interceptors.TxInterceptor
| >> org.jboss.cache.interceptors.CacheMgmtInterceptor
| >> org.jboss.cache.interceptors.InvocationContextInterceptor
| }
| 13:54:48,149 DEBUG [RegionManagerImpl] Not using an EvictionPolicy
| 13:54:48,171 DEBUG [VersionAwareMarshaller] Started with version 3.0.2 and versionInt 30
| 13:54:48,171 DEBUG [VersionAwareMarshaller] Using default marshaller class class org.jboss.cache.marshall.CacheMarshaller300
| 13:54:48,171 DEBUG [DataContainerImpl] Setting rootInternal to UnversionedNode[ /]
| 13:54:48,197 DEBUG [JmxRegistrationManager] Base name is: jboss.cache:service=JBossCache,uniqueId=8163c
| 13:54:48,224 INFO [PlatformMBeanServerRegistration] JBossCache MBeans were successfully registered to the platform mbean server.
| 13:54:48,225 DEBUG [RPCManagerImpl] cache mode is local, will not create the channel
| 13:54:48,225 INFO [ComponentRegistry] JBoss Cache version: JBossCache 'Naga' 3.0.2.GA
| 13:54:48,240 DEBUG [SleeTransactionManagerImpl] Transaction started: TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:9 status: ActionStatus.RUNNING >
| 13:54:48,268 DEBUG [SleeTransactionManagerImpl] beforeCompletion for tx TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:9 status: ActionStatus.RUNNING >
| 13:54:48,269 DEBUG [SleeTransactionManagerImpl] Committed tx TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:9 status: ActionStatus.COMMITTED >
| 13:54:48,274 DEBUG [SleeTransactionManagerImpl] Transaction started: TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:c status: ActionStatus.RUNNING >
| 13:54:48,274 DEBUG [SleeTransactionManagerImpl] rollbackonly set on tx TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:c status: ActionStatus.ABORT_ONLY >
| 13:54:48,274 WARN [TransactionTable] status is 1 (not ACTIVE or PREPARING); returning null)
| 13:54:48,275 DEBUG [SleeTransactionManagerImpl] Rollbacked tx TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:c status: ActionStatus.ABORTED >
| 13:54:48,275 DEBUG [SleeTransactionManagerImpl] Transaction started: TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:e status: ActionStatus.RUNNING >
| 13:54:48,276 INFO [SleeTransactionManagerImpl] BIGGGGGGGGGGGGGGG ISSSSSSSSSSSSSSSSSSSSUEEEEEEEEEE
| 13:54:48,276 DEBUG [SleeTransactionManagerImpl] beforeCompletion for tx TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:e status: ActionStatus.RUNNING >
| 13:54:48,276 DEBUG [SleeTransactionManagerImpl] Committed tx TransactionImple < ac, BasicAction: -53e0fec0:d8d2:49772925:e status: ActionStatus.COMMITTED >
|
Btw, same behavior with 3.0.1.GA
Configuration is pretty much default:
| <!-- JBOSS CACHE 3 -->
|
| <bean name="MobicentsCacheConfig" class="org.jboss.cache.config.Configuration">
| <property name="runtimeConfig">
| <bean name="MobicentsCacheRuntimeConfig" class="org.jboss.cache.config.RuntimeConfig">
| <property name="transactionManager">
| <inject bean="RealTransactionManager"/>
| </property>
| </bean>
| </property>
| </bean>
|
| <!-- Factory to build the Cache. -->
| <bean name="MobicentsCacheFactory" class="org.jboss.cache.DefaultCacheFactory">
| <constructor factoryClass="org.jboss.cache.DefaultCacheFactory" factoryMethod="getInstance" />
| </bean>
|
| <!-- The cache itself -->
| <bean name="MobicentsCache" class="org.jboss.cache.Cache">
| <constructor factoryMethod="createCache">
| <factory bean="MobicentsCacheFactory"/>
| <parameter class="org.jboss.cache.config.Configuration"><inject bean="MobicentsCacheConfig"/></parameter>
| <parameter class="boolean">false</parameter>
| </constructor>
| </bean>
|
--Eduardo
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4203640#4203640
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4203640
17 years, 3 months
[EJB/JBoss] - Stateful Session Bean Cache Policy
by pcarrollnf
I have a stateful session bean in my application. When a user performs a search in the application, the stateful session bean is used so that the results may be paged through even if a user does not click next page for quite some time. I seem to be running into a situation where JBoss passivates several stateful session beans one after the other. This appears to be taking up a lot of system resources and the remainder of the application seems to hang or at least performance has degraded significantly while JBoss completes this operation. I would like some advice as to how I should tweak my container-cache-conf settings so that I do not get so many passivations at one time. Thanks.
| <container-cache-conf>
| <cache-policy>org.jboss.ejb.plugins.LRUStatefulContextCachePolicy</cache-policy>
| <cache-policy-conf>
| <min-capacity>50</min-capacity>
| <max-capacity>1000000</max-capacity>
| <remover-period>1800</remover-period>
| <max-bean-life>28800</max-bean-life>
| <overager-period>300</overager-period>
| <max-bean-age>600</max-bean-age>
| <resizer-period>400</resizer-period>
| <max-cache-miss-period>60</max-cache-miss-period>
| <min-cache-miss-period>1</min-cache-miss-period>
| <cache-load-factor>0.75</cache-load-factor>
| </cache-policy-conf>
| </container-cache-conf>
| <container-pool-conf>
| <MaximumSize>250</MaximumSize>
| </container-pool-conf>
|
I also get this exception when many beans are being passivated: EJBException: Could not passivate Too many open files.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4203618#4203618
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4203618
17 years, 3 months