[jboss-user] [JBossCache] - NPE occuring in OptimisticNodeInterceptor in 1.4.1SP3

Benbo do-not-reply at jboss.com
Tue Apr 24 05:45:11 EDT 2007


Hi There,

I'm currently using JBossCache 1.4.1SP3, with Hibernate 3.2.2, using the following config files:

treecache.xml:

<server>
  | 
  |     <classpath codebase="./lib" archives="jboss-cache.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>
  | 
  |         <!--
  |             Configure the TransactionManager : no matter since Hibernate will plug in
  |             an "adapter" to its own TransactionManagerLookup strategy here
  |         -->
  |         <attribute name="TransactionManagerLookupClass">org.jboss.cache.GenericTransactionManagerLookup</attribute>
  | 
  | 
  |         <!--
  |             Node locking scheme:
  |                 OPTIMISTIC
  |                 PESSIMISTIC (default)
  |         -->
  |         <attribute name="NodeLockingScheme">OPTIMISTIC</attribute>
  | 
  |         <!--
  |             Note that this attribute is IGNORED if your NodeLockingScheme above is OPTIMISTIC.
  | 
  |             Isolation level : SERIALIZABLE
  |                               REPEATABLE_READ (default)
  |                               READ_COMMITTED
  |                               READ_UNCOMMITTED
  |                               NONE
  |         -->
  |         <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
  | 
  |         <!--
  |              Valid modes are LOCAL
  |                              REPL_ASYNC
  |                              REPL_SYNC
  |                              INVALIDATION_ASYNC
  |                              INVALIDATION_SYNC
  | 
  |              INVALIDATION_ASYNC is highly recommended as the mode for use
  |              with clustered second-level caches.
  |         -->
  |         <attribute name="CacheMode">REPL_ASYNC</attribute>
  | 
  |         <!--
  |         Just used for async repl: use a replication queue
  |         -->
  |         <attribute name="UseReplQueue">false</attribute>
  | 
  |         <!--
  |             Replication interval for replication queue (in ms)
  |         -->
  |         <attribute name="ReplQueueInterval">0</attribute>
  | 
  |         <!--
  |             Max number of elements which trigger replication
  |         -->
  |         <attribute name="ReplQueueMaxElements">0</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="48866"
  |                      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" />-->
  |                 <FD_SOCK/>
  |                 <VERIFY_SUSPECT timeout="1500"
  |                                 up_thread="false" down_thread="false"/>
  |                 <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
  |                                max_xmit_size="8192" up_thread="false" down_thread="false"/>
  |                 <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
  |                          down_thread="false"/>
  |                 <pbcast.STABLE desired_avg_gossip="20000"
  |                                up_thread="false" 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="true"/>
  |                 <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
  |             </config>
  |         </attribute>
  | 
  |         <!--
  |          Whether or not to fetch state on joining a cluster
  |          NOTE this used to be called FetchStateOnStartup and has been renamed to be more descriptive.
  |         -->
  |         <attribute name="FetchInMemoryState">false</attribute>
  | 
  |         <!--
  |             Number of milliseconds to wait until all responses for a
  |             synchronous call have been received.
  |         -->
  |         <attribute name="SyncReplTimeout">20000</attribute>
  | 
  |         <!-- Max number of milliseconds to wait for a lock acquisition -->
  |         <attribute name="LockAcquisitionTimeout">15000</attribute>
  | 
  | 
  |         <!-- Name of the eviction policy class. -->
  |         <attribute name="EvictionPolicyClass"></attribute>
  | 
  |         <!--
  |            Indicate whether to use marshalling or not. Set this to true if you are running under a scoped
  |            class loader, e.g., inside an application server. Default is "false".
  |         -->
  |         <attribute name="UseMarshalling">false</attribute>
  | 
  |     </mbean>
  | </server>
  | 

hibernate.cfg.xml:

<hibernate-configuration>
  |     <session-factory>
  | 
  |         <property name="xconfigKey">LOAD_TEST_HIBERNATE_DB_KEY</property>
  | 
  |         <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
  |         <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  |         <property name="connection.url">jdbc:oracle:thin:@q-load-mgr.qxlva-dev.com:1521:LOADTEST</property>
  |         <property name="connection.username">loadtest</property>
  |         <property name="connection.password">password</property>
  |         <property name="hibernate.cache.use_query_cache">true</property>
  | 
  |         <!--JDBC connection pool (use the built-in) -->
  |         <!--<property name="connection.pool_size">1</property>-->
  | 
  |         <!-- configuration pool via c3p0-->
  |         <property name="c3p0.acquire_increment">1</property>
  |         <property name="c3p0.idle_test_period">100</property>
  |         <!-- seconds -->
  |         <property name="c3p0.max_size">10</property>
  |         <property name="c3p0.max_statements">200</property>
  |         <property name="c3p0.min_size">10</property>
  |         <property name="c3p0.timeout">1000</property>
  | 
  | 
  |         <!--property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property -->
  |         <property name="cache.provider_class">org.hibernate.cache.OptimisticTreeCacheProvider</property>
  | 
  |         <!-- JBoss Transactions Manager lookup class  -->
  |         <property name="transaction.manager_lookup_class">com.qxlva.mm.dispensing.loadtest.transaction.JBossTSTransactionManagerLookup</property>
  | 
  |         <!-- Echo all executed SQL to stdout -->
  |         <property name="show_sql">false</property>
  | 
  | 
  |         <mapping resource="hbmfiles/ManagerDetails.hbm.xml"/>
  |         <mapping resource="hbmfiles/TestNugget.hbm.xml"/>
  |         <mapping resource="hbmfiles/Scenario.hbm.xml"/>
  |         <mapping resource="hbmfiles/PharmacyType.hbm.xml"/>
  |         <mapping resource="hbmfiles/ConnectedClient.hbm.xml"/>
  |         <mapping resource="hbmfiles/MessageTrace.hbm.xml"/>
  |         <mapping resource="hbmfiles/TimerCondition.hbm.xml"/>
  |         <mapping resource="hbmfiles/MessageCondition.hbm.xml"/>
  |         <mapping resource="hbmfiles/TestRun.hbm.xml"/>
  |         <mapping resource="hbmfiles/CertificateCredentials.hbm.xml"/>
  |         <mapping resource="hbmfiles/Pharmacy.hbm.xml"/>
  |         <mapping resource="hbmfiles/UserRegistration.hbm.xml"/>
  |         <mapping resource="hbmfiles/WorkUnit.hbm.xml"/>
  |         <mapping resource="hbmfiles/ScenarioInteraction.hbm.xml"/>
  |         <mapping resource="hbmfiles/Message.hbm.xml"/>
  |         <mapping resource="hbmfiles/Schedule.hbm.xml"/>
  | 
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.Pharmacy" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.PharmacyType" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.Scenario" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.ScenarioInteraction" usage="transactional"/>
  | 
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.CertificateCredentials" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.ManagerDetails" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.MessageTrace" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.MessageCondition" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.TimerCondition" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.TestNugget" usage="transactional"/>
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.Schedule" usage="transactional"/>
  | 
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.Pharmacy.messageMap"
  |                           region="Pharmacy.messageMap" usage="transactional"/>
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.Pharmacy.completedMessageMap"
  |                           region="Pharmacy.completedMessageMap" usage="transactional"/>
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.Pharmacy.scenarioInteractions"
  |                           region="Pharmacy.scenarioInteractions" usage="transactional"/>
  | 
  | 
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.PharmacyType.messageLoadSchedule"
  |                           region="PharmacyType.messageLoadSchedule" usage="transactional"/>
  | 
  | 
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.MessageTrace.conditions"
  |                           region="MessageTrace.conditions" usage="transactional"/>
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.MessageTrace.messageTimings"
  |                           region="MessageTrace.messageTimings" usage="transactional"/>
  | 
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.ScenarioInteraction.messageIds"
  |                           region="ScenarioInteraction.messageIds" usage="transactional"/>
  | 
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.ManagerDetails.certificates"
  |                           region="ManagerDetails.certificates" usage="transactional"/>
  | 
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.ManagerDetails.nuggets"
  |                           region="ManagerDetails.nuggets" usage="transactional"/>
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.ManagerDetails.workUnits"
  |                           region="ManagerDetails.workUnits" usage="transactional"/>
  | 
  | 
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.Schedule.scenarioList"
  |                           region="Schedule.scenarioList" usage="transactional"/>
  | 
  |         <class-cache class="com.qxlva.mm.dispensing.loadtest.model.ConnectedClient" usage="transactional"/>
  |         <collection-cache collection="com.qxlva.mm.dispensing.loadtest.model.ManagerDetails.clientsConnected"
  |                           region="ManagerDetails.clientsConnected" usage="transactional"/>
  | 
  | 
  |     </session-factory>
  | </hibernate-configuration>

I am using the JBossTSTransactionManagerLookup from the hbcache demo, which looks like this:

public class JBossTSTransactionManagerLookup implements TransactionManagerLookup
  | {
  | 
  |     public TransactionManager getTransactionManager(Properties properties) throws HibernateException
  |     {
  |         return com.arjuna.ats.jta.TransactionManager.transactionManager();
  |     }
  | 
  |     public String getUserTransactionName()
  |     {
  |         throw new UnsupportedOperationException();
  |     }
  | }


When I try to query the database, I get the following exception:


  | ------------------------------------------------------
  | GMS: address is 192.168.176.54:3315
  | -------------------------------------------------------
  | UpHandler (STATE_TRANSFER) 10:43:07,377  INFO TreeCache:4620 - viewAccepted(): [192.168.176.54:3315|0] [192.168.176.54:3315]
  | main 10:43:07,392  INFO TreeCache:1325 - my local address is 192.168.176.54:3315
  | main 10:43:07,986  WARN SessionFactoryImpl:994 - JTASessionContext being used with JDBCTransactionFactory; auto-flush will not operate correctly with getCurrentSession()
  | main 10:43:08,455  WARN arjLoggerI18N:206 - [com.arjuna.ats.arjuna.coordinator.TxControl_1] - Name of XA node not defined. Using -3f574fca:cf8:462dd12c:1
  | main 10:43:08,517  INFO arjLoggerI18N:185 - [com.arjuna.ats.arjuna.recovery.TransactionStatusManager_1] - Starting service com.arjuna.ats.arjuna.recovery.ActionStatusService on port 3320
  | main 10:43:08,517  INFO arjLogger:185 - TransactionStatusManagerItem - host: 192.168.176.54 port: 3320
  | main 10:43:08,533  INFO arjLoggerI18N:185 - [com.arjuna.ats.arjuna.recovery.TransactionStatusManager_3] - TransactionStatusManager started on port 3320 with service com.arjuna.ats.arjuna.recovery.ActionStatusService
  | main 10:43:08,830  WARN TxInterceptor:332 - Rolling back, exception encountered
  | java.lang.NullPointerException
  | 	at org.jboss.cache.interceptors.OptimisticNodeInterceptor.invoke(OptimisticNodeInterceptor.java:68)
  | 	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:67)
  | 	at org.jboss.cache.interceptors.OptimisticCreateIfNotExistsInterceptor.invoke(OptimisticCreateIfNotExistsInterceptor.java:68)
  | 	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:67)
  | 	at org.jboss.cache.interceptors.OptimisticValidatorInterceptor.invoke(OptimisticValidatorInterceptor.java:76)
  | 	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:67)
  | 	at org.jboss.cache.interceptors.OptimisticLockingInterceptor.invoke(OptimisticLockingInterceptor.java:116)
  | 	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:67)
  | 	at org.jboss.cache.interceptors.OptimisticReplicationInterceptor.invoke(OptimisticReplicationInterceptor.java:137)
  | 	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:67)
  | 	at org.jboss.cache.interceptors.TxInterceptor.handleNonTxMethod(TxInterceptor.java:321)
  | 	at org.jboss.cache.interceptors.TxInterceptor.invoke(TxInterceptor.java:136)
  | 	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:67)
  | 	at org.jboss.cache.interceptors.CacheMgmtInterceptor.invoke(CacheMgmtInterceptor.java:181)
  | 	at org.jboss.cache.TreeCache.invokeMethod(TreeCache.java:4786)
  | 	at org.jboss.cache.TreeCache.remove(TreeCache.java:3299)
  | 	at org.jboss.cache.TreeCache.remove(TreeCache.java:2851)
  | 	at org.hibernate.cache.OptimisticTreeCache.writeLoad(OptimisticTreeCache.java:76)
  | 	at org.hibernate.cache.TransactionalCache.put(TransactionalCache.java:55)
  | 	at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:156)
  | 	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
  | 	at org.hibernate.loader.Loader.doQuery(Loader.java:729)
  | 	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
  | 	at org.hibernate.loader.Loader.doList(Loader.java:2220)
  | 	at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2136)
  | 	at org.hibernate.loader.Loader.list(Loader.java:2096)
  | 	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
  | 	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
  | 	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
  | 	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
  | 	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
  | 	at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:811)
  | 	at com.qxlva.mm.dispensing.loadtest.dao.ManagerDetailsDao.getManagerDetails(ManagerDetailsDao.java:78)
  | 	at TestJBossCache.main(TestJBossCache.java:33)
  | 	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:585)
  | 	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
  | main 10:43:08,861  WARN TxInterceptor:332 - Rolling back, exception encountered

Please advise as I can't find any reference to a similar problem in 1.4.1SP3 anywhere.

Thanks,

Ben

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4040131#4040131

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4040131



More information about the jboss-user mailing list