From commits-return-3731-apmail-ode-commits-archive=ode.apache.org@ode.apache.org Wed Feb 11 19:47:28 2009 Return-Path: Delivered-To: apmail-ode-commits-archive@www.apache.org Received: (qmail 18492 invoked from network); 11 Feb 2009 19:47:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 Feb 2009 19:47:28 -0000 Received: (qmail 94041 invoked by uid 500); 11 Feb 2009 19:47:28 -0000 Delivered-To: apmail-ode-commits-archive@ode.apache.org Received: (qmail 94025 invoked by uid 500); 11 Feb 2009 19:47:28 -0000 Mailing-List: contact commits-help@ode.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ode.apache.org Delivered-To: mailing list commits@ode.apache.org Received: (qmail 94016 invoked by uid 99); 11 Feb 2009 19:47:28 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 Feb 2009 11:47:28 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 Feb 2009 19:47:27 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 49A6A238899B; Wed, 11 Feb 2009 19:47:07 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r743468 - /ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ODEProcess.java Date: Wed, 11 Feb 2009 19:47:07 -0000 To: commits@ode.apache.org From: karthick@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090211194707.49A6A238899B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: karthick Date: Wed Feb 11 19:47:06 2009 New Revision: 743468 URL: http://svn.apache.org/viewvc?rev=743468&view=rev Log: Perform delete and insert of process models in separate transactions, as a work around for hibernate issue HHH-2801. Modified: ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ODEProcess.java Modified: ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ODEProcess.java URL: http://svn.apache.org/viewvc/ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ODEProcess.java?rev=743468&r1=743467&r2=743468&view=diff ============================================================================== --- ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ODEProcess.java (original) +++ ode/trunk/engine/src/main/java/org/apache/ode/bpel/engine/ODEProcess.java Wed Feb 11 19:47:06 2009 @@ -1000,6 +1000,38 @@ * exists and matches the GUID. */ private void bounceProcessDAO(BpelDAOConnection conn, final QName pid, final long version, final ProcessModel mprocess) { + deleteProcessDAO(conn, pid, version, mprocess); + createProcessDAO(conn, pid, version, mprocess); + } + + private void deleteProcessDAO(BpelDAOConnection conn, final QName pid, final long version, final ProcessModel mprocess) { + __log.debug("Creating process DAO for " + pid + " (guid=" + mprocess.getGuid() + ")"); + try { + ProcessDAO old = conn.getProcess(pid); + if (old != null) { + __log.debug("Found ProcessDAO for " + pid + " with GUID " + old.getGuid()); + if (mprocess.getGuid() == null) { + // No guid, old version assume its good + } else { + if (old.getGuid().equals(mprocess.getGuid())) { + // Guids match, no need to create + } else { + // GUIDS dont match, delete and create new + String errmsg = "ProcessDAO GUID " + old.getGuid() + " does not match " + mprocess.getGuid() + "; replacing."; + __log.debug(errmsg); + old.delete(); + } + } + } + } catch (BpelEngineException ex) { + throw ex; + } catch (Exception dce) { + __log.error("DbError", dce); + throw new BpelEngineException("DbError", dce); + } + } + + private void createProcessDAO(BpelDAOConnection conn, final QName pid, final long version, final ProcessModel mprocess) { __log.debug("Creating process DAO for " + pid + " (guid=" + mprocess.getGuid() + ")"); try { boolean create = true; @@ -1017,7 +1049,6 @@ // GUIDS dont match, delete and create new String errmsg = "ProcessDAO GUID " + old.getGuid() + " does not match " + mprocess.getGuid() + "; replacing."; __log.debug(errmsg); - old.delete(); } } } @@ -1035,7 +1066,7 @@ throw new BpelEngineException("DbError", dce); } } - + MessageExchangeDAO createMessageExchange(String mexId, final char dir) { if (isInMemory()) { return _inMemDao.getConnection().createMessageExchange(mexId, dir); @@ -1259,7 +1290,13 @@ try { _contexts.execTransaction(new Callable() { public Object call() throws Exception { - bounceProcessDAO(_contexts.dao.getConnection(), _pid, _pconf.getVersion(), _processModel); + deleteProcessDAO(_contexts.dao.getConnection(), _pid, _pconf.getVersion(), _processModel); + return null; + } + }); + _contexts.execTransaction(new Callable() { + public Object call() throws Exception { + createProcessDAO(_contexts.dao.getConnection(), _pid, _pconf.getVersion(), _processModel); return null; } });