Results 1 to 2 of 2

Thread: Is OPTIMISTIC_FORCE_INCREMENT lock type supported ?

  1. #1
    Join Date
    Apr 2005
    Posts
    8

    Default Is OPTIMISTIC_FORCE_INCREMENT lock type supported ?

    In our app, we are trying to use the OPTIMISTIC_FORCE_INCREMENT lock inside a JTA transaction. When committing it, we got an exception(below) complaining that the session is already closed when it tries to increment the version.
    I can reproduce this behavior with a simple test app (one session bean deployed in JBoss 5 loading an entity and setting the lock).
    Is such a lock supported by Spring ?


    Code:
    public DocumentOwner doInHibernate(Session session)
    		throws HibernateException, SQLException {
    	Criteria criteria = session.createCriteria(DocumentOwner.class).add(Restrictions.eq("sid", sid));
    	criteria.setLockMode(LockMode.OPTIMISTIC_FORCE_INCREMENT);
    	return (DocumentOwner)criteria.uniqueResult();
    }
    
    @Stateless
    @Remote(DocumentOwnerRemote.class)
    @Transactional
    @Interceptors(SpringBeanAutowiringInterceptor.class)
    @Resource(name="jdbc/SeXADataSource", mappedName="java:/jdbc/SeXADataSource")
    public class DocumentOwnerSessionBean implements DocumentOwnerRemote {
    
    	@Autowired
    	private DocumentOwnerDAO dao;
    	
    	public DocumentOwner getDocumentOwner(Long sid) {
    
    		return dao.loadDocumentOwner(sid);				
    		
    	}	
    	
    }
    
    
    	<tx:annotation-driven />
    
    	<tx:jta-transaction-manager />
    
    	<jee:jndi-lookup id="dataSource" jndi-name="jdbc/SeXADataSource"
    		resource-ref="true">
    		<jee:environment>
    		java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    		java.naming.provider.url=jnp://localhost:1099
    		java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces	
    		</jee:environment>
    	</jee:jndi-lookup>
    
    	<bean id="sessionFactory"
    		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<!-- Must references all OR mapping files. -->
    		<property name="configLocation" value="classpath:hibernate.cfg.xml" />
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
    				<prop key="hibernate.show_sql">true</prop>
    				<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory
    				</prop>
    				<prop key="hibernate.current_session_context_class">jta</prop>
    				<prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup
    				</prop>
    			</props>
    		</property>
    	</bean>

    Caused by: org.hibernate.SessionException: Session is closed!
    at org.hibernate.impl.AbstractSessionImpl.errorIfClos ed(AbstractSessionImpl.java:72)
    at org.hibernate.impl.SessionImpl.getBatcher(SessionI mpl.java:305)
    at org.hibernate.persister.entity.AbstractEntityPersi ster.forceVersionIncrement(AbstractEntityPersister .java:1332)
    at org.hibernate.action.EntityIncrementVersionProcess .doBeforeTransactionCompletion(EntityIncrementVers ionProcess.java:51)
    at org.hibernate.engine.ActionQueue$BeforeTransaction CompletionProcessQueue.beforeTransactionCompletion (ActionQueue.java:543)
    at org.hibernate.engine.ActionQueue.beforeTransaction Completion(ActionQueue.java:216)
    at org.hibernate.impl.SessionImpl.beforeTransactionCo mpletion(SessionImpl.java:571)
    at org.hibernate.jdbc.JDBCContext.beforeTransactionCo mpletion(JDBCContext.java:250)
    at org.hibernate.transaction.synchronization.Callback Coordinator.beforeCompletion(CallbackCoordinator.j ava:125)
    at org.hibernate.transaction.synchronization.Hibernat eSynchronizationImpl.beforeCompletion(HibernateSyn chronizationImpl.java:51)
    at com.arjuna.ats.internal.jta.resources.arjunacore.S ynchronizationImple.beforeCompletion(Synchronizati onImple.java:101)
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordina tor.beforeCompletion(TwoPhaseCoordinator.java:269)
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordina tor.end(TwoPhaseCoordinator.java:89)
    at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAc tion.java:177)
    at com.arjuna.ats.internal.jta.transaction.arjunacore .TransactionImple.commitAndDisassociate(Transactio nImple.java:1423)
    at com.arjuna.ats.internal.jta.transaction.arjunacore .BaseTransaction.commit(BaseTransaction.java:137)
    at com.arjuna.ats.jbossatx.BaseTransactionManagerDele gate.commit(BaseTransactionManagerDelegate.java:75 )
    at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPol icy.java:170)
    at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPoli cy.java:87)
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke (TxInterceptor.java:190)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.aspects.tx.TxPropagationInterceptor.invo ke(TxPropagationInterceptor.java:76)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInter ceptor.java:42)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.ejb3.security.RoleBasedAuthorizationInte rceptorv2.invoke(RoleBasedAuthorizationInterceptor v2.java:201)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.ejb3.security.Ejb3AuthenticationIntercep torv2.invoke(Ejb3AuthenticationInterceptorv2.java: 186)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.ejb3.ENCPropagationInterceptor.invoke(EN CPropagationInterceptor.java:41)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.ejb3.BlockContainerShutdownInterceptor.i nvoke(BlockContainerShutdownInterceptor.java:67)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.aspects.currentinvocation.CurrentInvocat ionInterceptor.invoke(CurrentInvocationInterceptor .java:67)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNex t(MethodInvocation.java:102)
    at org.jboss.ejb3.stateless.StatelessContainer.dynami cInvoke(StatelessContainer.java:421)
    at org.jboss.ejb3.session.InvokableContextClassProxyH ack._dynamicInvoke(InvokableContextClassProxyHack. java:53)
    at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91 )
    at org.jboss.aspects.remoting.AOPRemotingInvocationHa ndler.invoke(AOPRemotingInvocationHandler.java:82)
    at org.jboss.remoting.ServerInvoker.invoke(ServerInvo ker.java:891)
    at org.jboss.remoting.transport.socket.ServerThread.c ompleteInvocation(ServerThread.java:744)
    at org.jboss.remoting.transport.socket.ServerThread.p rocessInvocation(ServerThread.java:697)
    at org.jboss.remoting.transport.socket.ServerThread.d orun(ServerThread.java:524)
    at org.jboss.remoting.transport.socket.ServerThread.r un(ServerThread.java:232)

  2. #2
    Join Date
    Apr 2005
    Posts
    8

    Default

    Ok setting the allowCreate flag to false in HibernateTemplate seems to solve the issue...

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •