Return-Path: Delivered-To: apmail-jackrabbit-users-archive@locus.apache.org Received: (qmail 38319 invoked from network); 9 May 2008 13:32:13 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 9 May 2008 13:32:13 -0000 Received: (qmail 32118 invoked by uid 500); 9 May 2008 13:32:14 -0000 Delivered-To: apmail-jackrabbit-users-archive@jackrabbit.apache.org Received: (qmail 32095 invoked by uid 500); 9 May 2008 13:32:14 -0000 Mailing-List: contact users-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@jackrabbit.apache.org Delivered-To: mailing list users@jackrabbit.apache.org Received: (qmail 32081 invoked by uid 99); 9 May 2008 13:32:14 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 May 2008 06:32:14 -0700 X-ASF-Spam-Status: No, hits=2.6 required=10.0 tests=DNS_FROM_OPENWHOIS,SPF_HELO_PASS,SPF_PASS,WHOIS_MYPRIVREG X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of lists@nabble.com designates 216.139.236.158 as permitted sender) Received: from [216.139.236.158] (HELO kuber.nabble.com) (216.139.236.158) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 May 2008 13:31:26 +0000 Received: from isper.nabble.com ([192.168.236.156]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1JuShI-0005Ln-0q for users@jackrabbit.apache.org; Fri, 09 May 2008 06:31:40 -0700 Message-ID: <17147985.post@talk.nabble.com> Date: Fri, 9 May 2008 06:31:39 -0700 (PDT) From: Roman Puchkovskiy To: users@jackrabbit.apache.org Subject: Problem when trying to reuse version label in transaction MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: roman.puchkovskiy@blandware.com X-Virus-Checked: Checked by ClamAV on apache.org Hi. There's a problem with reusage of version label. If version (which has label assigned) is removed inside a transaction, and after this same label is tried to be assigned to another version (in same transaction), exception is thrown. Maven project with test case is here: http://rpuch.narod.ru/test-reassign-version-label-in-tx.zip When you run 'mvn test', test using transaction fails, following exception is thrown: org.springframework.dao.DataIntegrityViolationException: Invalid version graph operation; nested exception is javax.jcr.version.VersionException: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2 at org.springmodules.jcr.SessionFactoryUtils.translateException(SessionFactoryUtils.java:230) at org.springmodules.jcr.JcrAccessor.convertJcrAccessException(JcrAccessor.java:58) at org.springmodules.jcr.JcrTemplate.execute(JcrTemplate.java:82) at org.springmodules.jcr.JcrTemplate.execute(JcrTemplate.java:108) at ReassignVersionLabelInTxTest$3.doInTransaction(ReassignVersionLabelInTxTest.java:91) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128) at ReassignVersionLabelInTxTest.testReassignVersionLabelInTxThreeTransactions(ReassignVersionLabelInTxTest.java:89) Caused by: javax.jcr.version.VersionException: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2 at org.apache.jackrabbit.core.version.InternalVersionHistoryImpl.setVersionLabel(InternalVersionHistoryImpl.java:438) at org.apache.jackrabbit.core.version.AbstractVersionManager.setVersionLabel(AbstractVersionManager.java:511) at org.apache.jackrabbit.core.version.XAVersionManager.setVersionLabel(XAVersionManager.java:411) at org.apache.jackrabbit.core.version.XAVersionManager.setVersionLabel(XAVersionManager.java:183) at org.apache.jackrabbit.core.version.VersionHistoryImpl.addVersionLabel(VersionHistoryImpl.java:139) at ReassignVersionLabelInTxTest$3$1.doInJcr(ReassignVersionLabelInTxTest.java:101) at org.springmodules.jcr.JcrTemplate.execute(JcrTemplate.java:76) ... 30 more Caused by: javax.jcr.RepositoryException: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2 at org.apache.jackrabbit.core.version.NodeStateEx.store(NodeStateEx.java:505) at org.apache.jackrabbit.core.version.InternalVersionHistoryImpl.setVersionLabel(InternalVersionHistoryImpl.java:436) ... 36 more Caused by: org.apache.jackrabbit.core.state.NoSuchItemStateException: State has been marked destroyed: 8d73b533-a938-4795-96f6-9fd263d73569/{}2 at org.apache.jackrabbit.core.state.ChangeLog.get(ChangeLog.java:116) at org.apache.jackrabbit.core.state.XAItemStateManager.getItemState(XAItemStateManager.java:223) at org.apache.jackrabbit.core.version.NodeStateEx.store(NodeStateEx.java:523) at org.apache.jackrabbit.core.version.NodeStateEx.store(NodeStateEx.java:503) ... 37 more Failing test method is: public void testReassignVersionLabelInTxThreeTransactions() { final String v1 = (String) transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { return (String) jcrTemplate.execute(new JcrCallback() { public Object doInJcr(Session session) throws IOException, RepositoryException { Node target = session.getRootNode().addNode("target3"); target.addMixin("mix:versionable"); session.save(); VersionHistory vh = target.getVersionHistory(); Version v1 = target.checkin(); vh.addVersionLabel(v1.getName(), "1", false); return v1.getName(); } }); } }); final String v2 = (String) transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { return jcrTemplate.execute(new JcrCallback() { public Object doInJcr(Session session) throws IOException, RepositoryException { Node target = session.getRootNode().getNode("target3"); VersionHistory vh = target.getVersionHistory(); target.checkout(); Version v2 = target.checkin(); vh.addVersionLabel(v2.getName(), "2", false); return v2.getName(); } }); } }); transactionTemplate.execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { jcrTemplate.execute(new JcrCallback() { public Object doInJcr(Session session) throws IOException, RepositoryException { Node target = session.getRootNode().getNode("target3"); VersionHistory vh = target.getVersionHistory(); target.restore(v1, true); vh.removeVersion(v2); // creating again target.checkout(); Version v2 = target.checkin(); vh.addVersionLabel(v2.getName(), "2", false); // this fails return null; } }); return null; } }); } This method creates a node and its first version (which is assigned a label) in first transaction, then creates second version (which is assigned another label) in second transaction. Then in the third transaction node is restored to state stored in first version, second version is removed, new version is created and assigned a label which was assigned to second version. This last assignment of label fails. Please note that same sequence executes successfully if no transactions are used. -- View this message in context: http://www.nabble.com/Problem-when-trying-to-reuse-version-label-in-transaction-tp17147985p17147985.html Sent from the Jackrabbit - Users mailing list archive at Nabble.com.