KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > shark > instancepersistence > HibernatePersistentManager


1 /*
2  * Shark Hibernate persistent layer - Open Wide
3  */

4
5
6 package org.enhydra.shark.instancepersistence;
7
8 import java.math.BigDecimal JavaDoc;
9 import java.util.ArrayList JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.util.Iterator JavaDoc;
12 import java.util.List JavaDoc;
13 import java.util.Map JavaDoc;
14
15 import net.sf.hibernate.Query;
16 import net.sf.hibernate.Session;
17
18 import org.enhydra.shark.api.RootException;
19 import org.enhydra.shark.api.SharkTransaction;
20 import org.enhydra.shark.api.internal.instancepersistence.ActivityPersistenceInterface;
21 import org.enhydra.shark.api.internal.instancepersistence.ActivityVariablePersistenceInterface;
22 import org.enhydra.shark.api.internal.instancepersistence.AndJoinEntryInterface;
23 import org.enhydra.shark.api.internal.instancepersistence.AssignmentPersistenceInterface;
24 import org.enhydra.shark.api.internal.instancepersistence.DeadlinePersistenceInterface;
25 import org.enhydra.shark.api.internal.instancepersistence.PersistenceException;
26 import org.enhydra.shark.api.internal.instancepersistence.PersistentManagerInterface;
27 import org.enhydra.shark.api.internal.instancepersistence.ProcessMgrPersistenceInterface;
28 import org.enhydra.shark.api.internal.instancepersistence.ProcessPersistenceInterface;
29 import org.enhydra.shark.api.internal.instancepersistence.ProcessVariablePersistenceInterface;
30 import org.enhydra.shark.api.internal.instancepersistence.ResourcePersistenceInterface;
31 import org.enhydra.shark.api.internal.working.CallbackUtilities;
32 import org.enhydra.shark.instancepersistence.data.HibernateActivityState;
33 import org.enhydra.shark.instancepersistence.data.HibernateProcessState;
34 import org.enhydra.shark.transaction.SharkHibernateTransaction;
35 import org.enhydra.shark.transaction.ThreadLocalSession;
36 import org.enhydra.shark.utilities.MiscUtilities;
37 import org.enhydra.shark.utilities.hibernate.HibernateUtilities;
38
39 /**
40  * Used to save, restore or delete relevant engine objects from database, using
41  * Hibernate persistent layer.
42  *
43  * @author Vladislav Pernin
44  * @version 1.0
45  */

46 public class HibernatePersistentManager implements PersistentManagerInterface {
47
48    private static final String JavaDoc LOG_CHANNEL="Persistence";
49    private static final int RESOURCE_TYPE_OBJECT=0;
50    private static final int PROCESS_DEFINITION_TYPE_OBJECT=1;
51    private static final int PROCESS_TYPE_OBJECT=2;
52    private static final int ACTIVITY_TYPE_OBJECT=3;
53    private static final int ASSIGNMENT_TYPE_OBJECT=4;
54
55    private static final String JavaDoc[] activityAndProcessStates={"open.running",
56          "open.not_running.not_started","open.not_running.suspended",
57          "closed.completed", "closed.terminated", "closed.aborted"};
58
59    private CallbackUtilities cus;
60    private boolean deleteFinishedProcesses = false;
61    private Map JavaDoc _prStates;
62    private Map JavaDoc _acStates;
63
64    //////////////////////////////////////////////////////////////////
65
// Initialization methods
66
//////////////////////////////////////////////////////////////////
67

68    public void configure(CallbackUtilities cus) throws RootException {
69       this.cus = cus;
70       String JavaDoc del = cus.getProperty("HibernatePersistentManager.deleteFinishedProcesses");
71       deleteFinishedProcesses = new Boolean JavaDoc(del).booleanValue();
72       _prStates = new HashMap JavaDoc();
73       _acStates = new HashMap JavaDoc();
74
75       try {
76          try {
77             HibernateUtilities.init(cus.getProperties());
78          } catch (Throwable JavaDoc ex) {
79             ex.printStackTrace();
80          }
81          initActivityAndProcessStatesTable();
82       } catch (Throwable JavaDoc tr) {
83          cus.error(LOG_CHANNEL, "Problem with registering database manager with Hibernate !", new RootException(tr));
84          throw new RootException("Problem with registering database manager with Hibernate !", tr);
85       }
86    }
87
88    /**
89       * Fills the state table with possible activity and process states. For now,
90       * the 'keyValue' and the 'name' attribute of state record has the same value,
91       * but in the future, if the names of states changes, it will be very easy
92       * to change this table entries without affecting other tables.
93       * NOTE: When new names are introduced, the getPersistentXXX that use it
94       * also has to be changed
95       */

96    private void initActivityAndProcessStatesTable() throws PersistenceException {
97       SharkHibernateTransaction ti = null;
98       try {
99          ti = new SharkHibernateTransaction(ThreadLocalSession.currentSession().beginTransaction());
100          Session session = ti.getSession();
101          for (int i = 0; i < activityAndProcessStates.length; i++) {
102             String JavaDoc state = activityAndProcessStates[i];
103             HibernateProcessState hibProcessState = getPersistedProcessStateObject(state, session);
104             if (hibProcessState == null) {
105                hibProcessState = new HibernateProcessState();
106                hibProcessState.setKeyValue(state);
107                hibProcessState.setName(state);
108                hibProcessState.setDbId(getNextDecId(HibernateUtilities.HibernateProcessStateClassName).intValue());
109                session.save(hibProcessState);
110             } else {
111                hibProcessState.setName(state);
112                session.update(hibProcessState);
113             }
114             _prStates.put(state, new Integer JavaDoc(hibProcessState.getDbId()));
115             HibernateActivityState hibActivityState = getPersistedActivityStateObject(state, session);
116             if (hibActivityState == null) {
117                hibActivityState = new HibernateActivityState();
118                hibActivityState.setKeyValue(state);
119                hibActivityState.setName(state);
120                hibActivityState.setDbId(getNextDecId(HibernateUtilities.HibernateActivityStateClassName).intValue());
121                session.save(hibActivityState);
122             } else {
123                hibActivityState.setName(state);
124                session.update(hibActivityState);
125             }
126             _acStates.put(state, new Integer JavaDoc(hibActivityState.getDbId()));
127          }
128          ti.commit();
129          session.clear();
130          session.close();
131       } catch (Throwable JavaDoc thr) {
132          thr.printStackTrace();
133          throw new PersistenceException(thr);
134       } finally {
135          try {
136             ti = null;
137          } catch (Exception JavaDoc ex) {
138          }
139       }
140    }
141
142    //////////////////////////////////////////////////////////////////
143
// Closing methods
144
//////////////////////////////////////////////////////////////////
145

146    public void shutdownDatabase() throws PersistenceException {
147       try {
148          ThreadLocalSession.closeSession();
149       } catch (Throwable JavaDoc tr) {
150          cus.error(LOG_CHANNEL, "Database is not properly shudown !", new RootException(tr));
151          throw new PersistenceException("Database is not properly shudown !", tr);
152       }
153    }
154
155    //////////////////////////////////////////////////////////////////
156
// Persist methods
157
//////////////////////////////////////////////////////////////////
158

159    public void persist(ProcessMgrPersistenceInterface pm, SharkTransaction ti) throws PersistenceException {
160       try {
161          HibernateProcessMgr hibProcessMgr = getPersistedObject(pm, ti);
162          if (hibProcessMgr == null) {
163             hibProcessMgr = (HibernateProcessMgr) createProcessMgr();
164             hibProcessMgr.setName(pm.getName());
165             hibProcessMgr.setPackageId(pm.getPackageId());
166             hibProcessMgr.setProcessDefinitionId(pm.getProcessDefinitionId());
167             hibProcessMgr.setVersion(pm.getVersion());
168             hibProcessMgr.setCreated(pm.getCreated());
169             hibProcessMgr.setState(pm.getState());
170             ((SharkHibernateTransaction)ti).store(hibProcessMgr);
171          } else {
172             hibProcessMgr.setState(pm.getState());
173             ((SharkHibernateTransaction)ti).store(hibProcessMgr);
174          }
175          cus.info(LOG_CHANNEL, "ProcessDefinition[packageId=" + pm.getPackageId() + ",id=" + pm.getProcessDefinitionId() + "] persisted");
176       } catch (Throwable JavaDoc tr) {
177          cus.error(LOG_CHANNEL, "Persisting of ProcessDefinition " + pm.getProcessDefinitionId() + " failed");
178          throw new PersistenceException("Persisting of ProcessDefinition " + pm.getProcessDefinitionId() + " failed", tr);
179       }
180    }
181
182    public void persist(ProcessPersistenceInterface pr, SharkTransaction ti) throws PersistenceException {
183       try {
184          HibernateProcess hibProcess = getPersistedObject(pr, ti);
185          HibernateProcessRequester hibProcessRequester = getProcessRequester(pr.getId(),ti);
186
187          HibernateActivity hibActivity = null;
188          HibernateResource hibResource = null;
189
190          if (pr.getActivityRequesterId() != null)
191             hibActivity = getPersistedActivityObject(pr.getActivityRequesterId(), ti);
192          if (pr.getResourceRequesterId() != null)
193             hibResource = getPersistedResourceObject(pr.getResourceRequesterId(), ti);
194          HibernateProcessMgr hibProcessMgr = getPersistedProcessMgrObject(pr.getProcessMgrName(), ti);
195
196          if (hibProcess == null) {
197             hibProcess = (HibernateProcess) createProcess();
198
199             hibProcess.setId(pr.getId());
200             hibProcess.setProcessMgrName(hibProcessMgr.getName());
201             if (pr.getActivityRequesterId() != null)
202                hibProcess.setActivityRequesterId(hibActivity.getId());
203             if (pr.getResourceRequesterId() != null)
204                hibProcess.setResourceRequesterId(hibResource.getUsername());
205             hibProcess.setName(pr.getName());
206             hibProcess.setDescription(pr.getDescription());
207             hibProcess.setPriority(pr.getPriority());
208
209             hibProcess.setState(pr.getState());
210             Integer JavaDoc stateId = (Integer JavaDoc)_prStates.get(pr.getState());
211             hibProcess.setStateId(stateId.intValue());
212
213             hibProcess.setStartedTime(pr.getStartedTime());
214             hibProcess.setLastStateTime(pr.getLastStateTime());
215
216             hibProcessRequester.setId(pr.getId());
217             if (hibActivity != null){
218                hibProcessRequester.setActRequester(hibActivity.getId());
219             }
220             if (hibResource != null){
221                hibProcessRequester.setResRequester(hibResource.getUsername());
222             }
223
224             ((SharkHibernateTransaction)ti).store(hibProcessRequester);
225             ((SharkHibernateTransaction)ti).store(hibProcess);
226          } else {
227             if (hibActivity != null)
228                hibProcess.setActivityRequesterId(hibActivity.getId());
229             if (hibResource != null)
230                hibProcess.setResourceRequesterId(hibResource.getUsername());
231             hibProcess.setName(pr.getName());
232             hibProcess.setDescription(pr.getDescription());
233             hibProcess.setPriority(pr.getPriority());
234
235             hibProcess.setState(pr.getState());
236             Integer JavaDoc stateId = (Integer JavaDoc)_prStates.get(pr.getState());
237             hibProcess.setStateId(stateId.intValue());
238
239             hibProcess.setStartedTime(pr.getStartedTime());
240             hibProcess.setLastStateTime(pr.getLastStateTime());
241
242             hibProcessRequester.setId(pr.getId());
243             if (hibActivity != null){
244                hibProcessRequester.setActRequester(hibActivity.getId());
245             }
246             if (hibResource != null){
247                hibProcessRequester.setResRequester(hibResource.getUsername());
248             }
249
250              ((SharkHibernateTransaction)ti).store(hibProcessRequester);
251              ((SharkHibernateTransaction)ti).store(hibProcess);
252          }
253
254          cus.info(LOG_CHANNEL, "Process[id=" + pr.getId() + "] persisted");
255       } catch (Throwable JavaDoc tr) {
256          tr.printStackTrace();
257          cus.error(LOG_CHANNEL, "Persisting of Process " + pr.getId() + " failed");
258          throw new PersistenceException("Persisting of Process " + pr.getId() + " failed", tr);
259       }
260    }
261
262    public void persist(ActivityPersistenceInterface act, SharkTransaction ti) throws PersistenceException {
263       try {
264          HibernateActivity hibActivity = getPersistedObject(act, ti);
265
266          if (hibActivity == null) {
267             hibActivity = (HibernateActivity) createActivity();
268             hibActivity.setId(act.getId());
269             hibActivity.setActivityDefinitionId(act.getActivityDefinitionId());
270             hibActivity.setActivitySetDefinitionId(act.getActivitySetDefinitionId());
271             hibActivity.setProcessId(getPersistedProcessObject(act.getProcessId(), ti).getId());
272             String JavaDoc bActId = act.getBlockActivityId();
273             if (bActId != null) {
274                hibActivity.setBlockActivityId(getPersistedActivityObject(bActId, ti).getId());
275             }
276             hibActivity.setName(act.getName());
277             hibActivity.setDescription(act.getDescription());
278             hibActivity.setPriority(act.getPriority());
279             if (act.getResourceUsername() != null){
280                HibernateResource res = getPersistedResourceObject(act.getResourceUsername(), ti);
281                hibActivity.setResourceUsername(res.getUsername());
282             }
283             hibActivity.setState(act.getState());
284             Integer JavaDoc stateId = (Integer JavaDoc)_acStates.get(act.getState());
285             hibActivity.setStateId(stateId.intValue());
286
287             hibActivity.setLastStateTime(act.getLastStateTime());
288             hibActivity.setAcceptedTime(act.getAcceptedTime());
289             hibActivity.setActivatedTime(act.getActivatedTime());
290
291             ((SharkHibernateTransaction)ti).store(hibActivity);
292          } else {
293             hibActivity.setName(act.getName());
294             hibActivity.setDescription(act.getDescription());
295             hibActivity.setPriority(act.getPriority());
296             if (act.getResourceUsername() != null){
297                HibernateResource res = getPersistedResourceObject(act.getResourceUsername(), ti);
298                hibActivity.setResourceUsername(res.getUsername());
299             }
300             hibActivity.setState(act.getState());
301             Integer JavaDoc stateId = (Integer JavaDoc)_acStates.get(act.getState());
302             hibActivity.setStateId(stateId.intValue());
303
304             hibActivity.setLastStateTime(act.getLastStateTime());
305             hibActivity.setAcceptedTime(act.getAcceptedTime());
306             hibActivity.setActivatedTime(act.getActivatedTime());
307
308             ((SharkHibernateTransaction)ti).store(hibActivity);
309          }
310
311          cus.info(LOG_CHANNEL, "Activity[id=" + act.getId() + ",definitionId=" + act.getActivityDefinitionId() + "] persisted");
312       } catch (Throwable JavaDoc tr) {
313          tr.printStackTrace();
314          cus.error(LOG_CHANNEL, "Persisting of Activity " + act.getId() + " failed");
315          throw new PersistenceException("Persisting of Activity " + act.getId() + " failed", tr);
316       }
317    }
318
319    public void persist(ResourcePersistenceInterface res, SharkTransaction ti) throws PersistenceException {
320       try {
321          HibernateResource hibResource = getPersistedObject(res, ti);
322
323          // when this attribute is persisted - it is never changed
324
if (hibResource == null) {
325             hibResource = (HibernateResource) createResource();
326             hibResource.setUsername(res.getUsername());
327             hibResource.setName(res.getName());
328             ((SharkHibernateTransaction)ti).store(hibResource);
329          } else {
330             hibResource.setName(res.getName());
331             ((SharkHibernateTransaction)ti).store(hibResource);
332          }
333          cus.info(LOG_CHANNEL, "Resource[username=" + res.getUsername() + "] persisted");
334       } catch (Throwable JavaDoc tr) {
335          cus.error(LOG_CHANNEL, "Persisting of Resource " + res.getUsername() + " failed");
336          throw new PersistenceException("Persisting of Resource " + res.getUsername() + " failed", tr);
337       }
338    }
339
340    public void persist(AssignmentPersistenceInterface ass, SharkTransaction ti) throws PersistenceException {
341       try {
342          HibernateAssignment hibAssign = getPersistedObject(ass, ti);
343
344          // when this attribute is persisted - it is never changed
345
if (hibAssign == null) {
346             hibAssign = (HibernateAssignment) createAssignment();
347             hibAssign.setActivityId(getPersistedActivityObject(ass.getActivityId(), ti).getId());
348             hibAssign.setResourceUsername(getPersistedResourceObject(ass.getResourceUsername(), ti).getUsername());
349             //redundant information but needed for by the kernel
350
hibAssign.setProcessId(ass.getProcessId());
351             ((SharkHibernateTransaction)ti).store(hibAssign);
352          } else {
353             hibAssign.setResourceUsername(getPersistedResourceObject(ass.getResourceUsername(), ti).getUsername());
354             ((SharkHibernateTransaction)ti).store(hibAssign);
355          }
356          cus.info(LOG_CHANNEL, "Assignment[activityId=" + ass.getActivityId() + ", username=" + ass.getResourceUsername() + "] persisted");
357       } catch (Throwable JavaDoc tr) {
358          cus.error(LOG_CHANNEL, "Persisting of Assignment failed");
359          throw new PersistenceException("Persisting of Assignment failed", tr);
360       }
361    }
362
363    public void persist(AssignmentPersistenceInterface ass, String JavaDoc oldResUname, SharkTransaction ti) throws PersistenceException {
364       try {
365          Session session = ((SharkHibernateTransaction) ti).getSession();
366          HibernateAssignment hibAssign = getPersistedAssignmentObject(ass.getActivityId(), oldResUname, ti);
367          if (hibAssign != null) {
368             hibAssign.setResourceUsername(getPersistedResourceObject(ass.getResourceUsername(), ti).getUsername());
369             ((SharkHibernateTransaction)ti).store(hibAssign);
370          } else {
371             cus.error(LOG_CHANNEL, "Assignment[activityId=" + ass.getActivityId() + ", with old resource name=" + oldResUname + "] cannot be updatet because it is not persisted");
372          }
373
374          cus.info(LOG_CHANNEL, "Assignment[activityId=" + ass.getActivityId() + ", username=" + ass.getResourceUsername() + "] persisted");
375       } catch (Throwable JavaDoc tr) {
376          cus.error(LOG_CHANNEL, "Persisting of Assignment failed");
377          throw new PersistenceException("Persisting of Assignment failed", tr);
378       }
379    }
380
381    public void persist(ProcessVariablePersistenceInterface var, SharkTransaction ti) throws PersistenceException {
382       try {
383          HibernateProcessVariable hibProcessVariable = getPersistedObject(var, ti);
384          // when this attribute is persisted - it is never changed
385
if (hibProcessVariable == null) {
386             hibProcessVariable = (HibernateProcessVariable) createProcessVariable();
387             hibProcessVariable.setProcessId(getPersistedProcessObject(var.getProcessId(), ti).getId());
388             hibProcessVariable.setDefinitionId(var.getDefinitionId());
389             hibProcessVariable.setValue(MiscUtilities.serialize(var.getValue()));
390             ((SharkHibernateTransaction)ti).store(hibProcessVariable);
391          } else {
392             hibProcessVariable.setValue(MiscUtilities.serialize(var.getValue()));
393             ((SharkHibernateTransaction)ti).store(hibProcessVariable);
394          }
395          cus.info(LOG_CHANNEL, "ProcessVariable[processId=" + var.getProcessId() + ", definitionId=" + var.getDefinitionId() + "] persisted");
396       } catch (Throwable JavaDoc tr) {
397          cus.error(LOG_CHANNEL, "Persisting of ProcessVariable failed");
398          throw new PersistenceException("Persisting of ProcessVariable failed", tr);
399       }
400    }
401
402    public void persist(ActivityVariablePersistenceInterface var, SharkTransaction ti) throws PersistenceException {
403       try {
404          HibernateActivityVariable hibActivityVariable = getPersistedObject(var, ti);
405
406          // when this attribute is persisted - it is never changed
407
if (hibActivityVariable == null) {
408             hibActivityVariable = (HibernateActivityVariable) createActivityVariable();
409             hibActivityVariable.setActivityId(getPersistedActivityObject(var.getActivityId(), ti).getId());
410             hibActivityVariable.setDefinitionId(var.getDefinitionId());
411             hibActivityVariable.setValue(MiscUtilities.serialize(var.getValue()));
412             hibActivityVariable.setResultVariable(var.isResultVariable());
413             ((SharkHibernateTransaction)ti).store(hibActivityVariable);
414          } else {
415             hibActivityVariable.setValue(MiscUtilities.serialize(var.getValue()));
416             hibActivityVariable.setResultVariable(var.isResultVariable());
417             ((SharkHibernateTransaction)ti).store(hibActivityVariable);
418          }
419
420          cus.info(LOG_CHANNEL, "ActivityVariable[activityId=" + var.getActivityId() + ", definitionId=" + var.getDefinitionId() + "] persisted");
421       } catch (Throwable JavaDoc tr) {
422          cus.error(LOG_CHANNEL, "Persisting of ActivityVariable failed");
423          throw new PersistenceException("Persisting of ActivityVariable failed", tr);
424       }
425    }
426
427    public void persist(AndJoinEntryInterface aje, SharkTransaction ti) throws PersistenceException {
428       try {
429          Session session = ((SharkHibernateTransaction) ti).getSession();
430          HibernateAndJoinEntry hibAJE = (HibernateAndJoinEntry) createAndJoinEntry();
431          hibAJE.setProcessId(getPersistedProcessObject(aje.getProcessId(), ti).getId());
432          hibAJE.setActivityDefinitionId(aje.getActivityDefinitionId());
433          hibAJE.setActivitySetDefinitionId(aje.getActivitySetDefinitionId());
434          hibAJE.setActivityId(getPersistedActivityObject(aje.getActivityId(), ti).getId());
435          ((SharkHibernateTransaction)ti).store(hibAJE);
436
437          cus.info(LOG_CHANNEL, "AndJoinEntry[id=" + aje.getProcessId() + ",aDefId=" + aje.getActivityDefinitionId() + ",actId=" + aje.getActivityId() + "] persisted");
438       } catch (Throwable JavaDoc tr) {
439          cus.error(LOG_CHANNEL, "Persisting of AndJoinEntry [id=" + aje.getProcessId() + ",aDefId=" + aje.getActivityDefinitionId() + ",actId=" + aje.getActivityId() + "] failed");
440          throw new PersistenceException("Persisting of AndJoinEntry [id=" + aje.getProcessId() + ",aDefId=" + aje.getActivityDefinitionId() + ",actId=" + aje.getActivityId() + "] failed", tr);
441       }
442    }
443
444    public void persist(DeadlinePersistenceInterface dpe, SharkTransaction ti) throws PersistenceException {
445       try {
446          System.out.println("PERSIST DEADLINE :" + dpe);
447          HibernateDeadline hibDeadline = (HibernateDeadline) createDeadline();
448          hibDeadline.setProcessId(getPersistedProcessObject(dpe.getProcessId(),ti).getId());
449          hibDeadline.setActivityId(getPersistedActivityObject(dpe.getActivityId(),ti).getId());
450          hibDeadline.setExceptionName(dpe.getExceptionName());
451          hibDeadline.setTimeLimit(dpe.getTimeLimit());
452          hibDeadline.setSynchronous(dpe.isSynchronous());
453          System.out.println("PERSIST DEADLINE 2:" + hibDeadline);
454          ((SharkHibernateTransaction)ti).store(hibDeadline);
455          cus.info(LOG_CHANNEL,"Deadline[actId="+dpe.getActivityId()+",ExcName="+dpe.getExceptionName()+"] persisted");
456       }
457       catch (Throwable JavaDoc tr) {
458          cus.error(LOG_CHANNEL,"Persisting of Deadline[actId="+dpe.getActivityId()+",ExcName="+dpe.getExceptionName()+"] failed");
459          throw new PersistenceException(
460                "Persisting of Deadline[actId="+dpe.getActivityId()+",ExcName="+dpe.getExceptionName()+"] failed",tr);
461       }
462    }
463
464
465    //////////////////////////////////////////////////////////////////
466
// Restore methods
467
//////////////////////////////////////////////////////////////////
468

469    public ProcessMgrPersistenceInterface restoreProcessMgr(String JavaDoc mgrName, SharkTransaction ti) throws PersistenceException {
470       try {
471          Session session = ((SharkHibernateTransaction) ti).getSession();
472          return restore(getPersistedProcessMgrObject(mgrName, ti), session);
473
474       } catch (Throwable JavaDoc tr) {
475          cus.error(LOG_CHANNEL, "Restoring of ProcessDefinition name " + mgrName + " failed");
476          throw new PersistenceException("Restoring of ProcessDefinition " + mgrName + " failed", tr);
477       }
478    }
479
480    private ProcessMgrPersistenceInterface restore(HibernateProcessMgr hibProcessMgr, Session session) throws PersistenceException {
481       if (hibProcessMgr == null)
482          return null;
483       try {
484          cus.info(LOG_CHANNEL, "ProcessDefinition [name=" + hibProcessMgr.getName() + "] restored");
485       } catch (Throwable JavaDoc tr) {
486          cus.error(LOG_CHANNEL, "Restoring of Resource failed");
487          throw new PersistenceException("Restoring of Resource failed", tr);
488       }
489       return hibProcessMgr;
490    }
491
492    public ProcessPersistenceInterface restoreProcess(String JavaDoc procId, SharkTransaction ti) throws PersistenceException {
493       try {
494          Session session = ((SharkHibernateTransaction) ti).getSession();
495          return restore(getPersistedProcessObject(procId, ti), getProcessRequester(procId,ti),ti);
496       } catch (Throwable JavaDoc tr) {
497          tr.printStackTrace();
498          cus.error(LOG_CHANNEL, "Restoring of Process " + procId + " failed");
499          throw new PersistenceException("Restoring of Process " + procId + " failed", tr);
500       }
501    }
502
503    private ProcessPersistenceInterface restore(HibernateProcess hibProcess, HibernateProcessRequester processRequester, SharkTransaction ti) throws PersistenceException {
504       if (hibProcess == null)
505          return null;
506       try {
507          Session session = ((SharkHibernateTransaction) ti).getSession();
508          hibProcess.setState(getPersistedProcessStateObjectById(hibProcess.getStateId(), session).getName());
509
510          HibernateActivity hibActivity = null;
511          if (processRequester.getActRequester() != null)
512             hibActivity = getPersistedActivityObject(processRequester.getActRequester(), ti);
513          if (hibActivity != null) {
514             hibProcess.setActivityRequesterId(hibActivity.getId());
515             hibProcess.setActivityRequestersProcessId(hibActivity.getProcessId());
516          }
517          HibernateResource hibResource = null;
518          if (processRequester.getResRequester() != null)
519             hibResource = getPersistedResourceObject(processRequester.getResRequester(), ti);
520          if (hibResource != null){
521             hibProcess.setResourceRequesterId(hibResource.getUsername());
522          }
523          cus.info(LOG_CHANNEL, "Process[id=" + hibProcess.getId() + "] restored");
524       } catch (Throwable JavaDoc tr) {
525          cus.error(LOG_CHANNEL, "Restoring of Process failed");
526          throw new PersistenceException("Restoring of Process failed", tr);
527       }
528       return hibProcess;
529    }
530
531    public ActivityPersistenceInterface restoreActivity(String JavaDoc actId, SharkTransaction ti) throws PersistenceException {
532       try {
533          return restore(getPersistedActivityObject(actId, ti), ti);
534       } catch (Throwable JavaDoc tr) {
535          cus.error(LOG_CHANNEL, "Restoring of Activity " + actId + " failed");
536          throw new PersistenceException("Restoring of Activity " + actId + " failed", tr);
537       }
538    }
539
540    private ActivityPersistenceInterface restore(HibernateActivity hibActivity, SharkTransaction ti) throws PersistenceException {
541       if (hibActivity == null)
542          return null;
543
544       try {
545          Session session = ((SharkHibernateTransaction) ti).getSession();
546          HibernateProcessRequester processRequester = getProcessRequesterByActId(hibActivity.getId(),ti);
547          if (processRequester != null) {
548             hibActivity.setSubflowProcessId(processRequester.getId());
549          }
550          hibActivity.setState(getPersistedActivityStateObjectById(hibActivity.getStateId(), session).getName());
551          cus.info(LOG_CHANNEL, "Activity[id=" + hibActivity.getId() + ",definitionId=" + hibActivity.getActivityDefinitionId() + "] restored");
552       } catch (Throwable JavaDoc tr) {
553          cus.error(LOG_CHANNEL, "Restoring of Activity failed");
554          throw new PersistenceException("Restoring of Activity failed", tr);
555       }
556       return hibActivity;
557    }
558
559    public ResourcePersistenceInterface restoreResource(String JavaDoc resUsername, SharkTransaction ti) throws PersistenceException {
560       try {
561          Session session = ((SharkHibernateTransaction) ti).getSession();
562          return restore(getPersistedResourceObject(resUsername, ti), session);
563       } catch (Throwable JavaDoc tr) {
564          cus.error(LOG_CHANNEL, "Restoring of Resource " + resUsername + " failed");
565          throw new PersistenceException("Restoring of Resource " + resUsername + " failed", tr);
566       }
567    }
568
569    private ResourcePersistenceInterface restore(HibernateResource hibResource, Session session) throws PersistenceException {
570       if (hibResource == null)
571          return null;
572
573       try {
574          cus.info(LOG_CHANNEL, "Resource[username=" + hibResource.getUsername() + "] restored");
575       } catch (Throwable JavaDoc tr) {
576          cus.error(LOG_CHANNEL, "Restoring of Resource failed");
577          throw new PersistenceException("Restoring of Resource failed", tr);
578       }
579       return hibResource;
580    }
581
582    public AssignmentPersistenceInterface restoreAssignment(String JavaDoc actId, String JavaDoc resUsername, SharkTransaction ti) throws PersistenceException {
583       try {
584          return restore(getPersistedAssignmentObject(actId, resUsername, ti), ti);
585       } catch (Throwable JavaDoc tr) {
586          cus.error(LOG_CHANNEL, "Restoring of Assignment failed");
587          throw new PersistenceException("Restoring of Assignment failed", tr);
588       }
589    }
590
591    private AssignmentPersistenceInterface restore(HibernateAssignment hibAssign, SharkTransaction ti) throws PersistenceException {
592       if (hibAssign == null)
593          return null;
594       try {
595          hibAssign.setProcessId(getPersistedActivityObject(hibAssign.getActivityId(), ti).getProcessId());
596          cus.info(LOG_CHANNEL, "Assignment[activityId=" + hibAssign.getActivityId() + ", username=" + hibAssign.getResourceUsername() + "] restored");
597       } catch (Throwable JavaDoc tr) {
598          cus.error(LOG_CHANNEL, "Restoring of Assignment failed");
599          throw new PersistenceException("Restoring of Assignment failed", tr);
600       }
601       return hibAssign;
602    }
603
604    public boolean restore(ProcessVariablePersistenceInterface var, SharkTransaction ti) throws PersistenceException {
605       try {
606          Session session = ((SharkHibernateTransaction) ti).getSession();
607          return restore(var, getPersistedObject(var, ti), session);
608       } catch (Throwable JavaDoc tr) {
609          cus.error(LOG_CHANNEL, "Restoring of Assignment failed");
610          throw new PersistenceException("Restoring of Assignment failed", tr);
611       }
612    }
613
614    private boolean restore(ProcessVariablePersistenceInterface engineObj, HibernateProcessVariable hibProcessVariable, Session s) throws PersistenceException {
615       if (hibProcessVariable == null)
616          return false;
617       try {
618          engineObj.setProcessId(hibProcessVariable.getProcessId());
619          engineObj.setDefinitionId(hibProcessVariable.getDefinitionId());
620          engineObj.setValue(MiscUtilities.deserialize((byte[]) hibProcessVariable.getValue()));
621
622          cus.info(LOG_CHANNEL, "ProcessVariable[processId=" + engineObj.getProcessId() + ", definitionId=" + engineObj.getDefinitionId() + "] restored");
623       } catch (Throwable JavaDoc tr) {
624          cus.error(LOG_CHANNEL, "Restoring of ProcessVariable failed");
625          throw new PersistenceException("Restoring of ProcessVariable failed", tr);
626       }
627       return true;
628    }
629
630    public boolean restore(ActivityVariablePersistenceInterface var, SharkTransaction ti) throws PersistenceException {
631       try {
632          Session session = ((SharkHibernateTransaction) ti).getSession();
633          return restore(var, getPersistedObject(var, ti), session);
634       } catch (Throwable JavaDoc tr) {
635          cus.error(LOG_CHANNEL, "Restoring of Assignment failed");
636          throw new PersistenceException("Restoring of Assignment failed", tr);
637       }
638    }
639
640    private boolean restore(ActivityVariablePersistenceInterface engineObj, HibernateActivityVariable hibActivityVariable, Session s) throws PersistenceException {
641       if (hibActivityVariable == null)
642          return false;
643
644       try {
645          engineObj.setActivityId(hibActivityVariable.getActivityId());
646          engineObj.setDefinitionId(hibActivityVariable.getDefinitionId());
647          engineObj.setValue(MiscUtilities.deserialize((byte</