KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > shark > eventaudit > DODSEventAuditManager


1 package org.enhydra.shark.eventaudit;
2
3 import java.util.*;
4 import org.enhydra.shark.api.internal.eventaudit.*;
5 import org.enhydra.shark.eventaudit.data.*;
6
7 import com.lutris.appserver.server.sql.DBTransaction;
8 import java.math.BigDecimal JavaDoc;
9 import org.enhydra.dods.DODS;
10 import org.enhydra.shark.api.RootException;
11 import org.enhydra.shark.api.SharkTransaction;
12 import org.enhydra.shark.api.internal.working.CallbackUtilities;
13 import org.enhydra.shark.transaction.SharkDODSTransaction;
14 import org.enhydra.shark.utilities.MiscUtilities;
15 import org.enhydra.shark.utilities.dods.DODSUtilities;
16
17 /**
18  * Used to save, restore or delete relevant engine objects from database, using
19  * DODS persistent layer.
20  *
21  * @author Tanja Jovanovic
22  * @version 1.0
23  */

24 public class DODSEventAuditManager implements EventAuditManagerInterface {
25
26    protected static final String JavaDoc LOG_CHANNEL="Persistence";
27    protected static final String JavaDoc PACKAGE_LOADED="packageLoaded";
28    protected static final String JavaDoc PACKAGE_UNLOADED="packageUnloaded";
29    protected static final String JavaDoc PACKAGE_UPDATED="packageUpdated";
30    protected static final String JavaDoc PROCESS_CREATED="processCreated";
31    protected static final String JavaDoc PROCESS_STATE_CHANGED="processStateChanged";
32    protected static final String JavaDoc PROCESS_CONTEXT_CHANGED="processContextChanged";
33    protected static final String JavaDoc ACTIVITY_STATE_CHANGED="activityStateChanged";
34    protected static final String JavaDoc ACTIVITY_CONTEXT_CHANGED="activityContextChanged";
35    protected static final String JavaDoc ACTIVITY_RESULT_CHANGED="activityResultChanged";
36    protected static final String JavaDoc ACTIVITY_ASSIGNMENT_CHANGED="activityAssignmentChanged";
37    protected static final int RESOURCE_TYPE_OBJECT=0;
38    protected static final int PROCESS_DEFINITION_TYPE_OBJECT=1;
39    protected static final int PROCESS_TYPE_OBJECT=2;
40    protected static final int ACTIVITY_TYPE_OBJECT=3;
41    protected static final int ASSIGNMENT_TYPE_OBJECT=4;
42    protected static final int EVENT_AUDIT_ASSIGNMENT_TYPE_OBJECT=5;
43    protected static final int EVENT_AUDIT_DATA_TYPE_OBJECT=6;
44    protected static final int EVENT_AUDIT_STATE_TYPE_OBJECT=7;
45    protected static final int EVENT_AUDIT_CREATE_PROCESS_TYPE_OBJECT=8;
46    protected static final int EVENT_AUDIT_PACKAGE_TYPE_OBJECT=9;
47
48    protected static final String JavaDoc[] activityAndProcessStates={"open.running",
49          "open.not_running.not_started","open.not_running.suspended",
50          "closed.completed", "closed.terminated", "closed.aborted"};
51
52    protected static final String JavaDoc[] eventTypes={PACKAGE_LOADED,PACKAGE_UNLOADED,
53          PACKAGE_UPDATED,PROCESS_CREATED,PROCESS_STATE_CHANGED,
54          PROCESS_CONTEXT_CHANGED,ACTIVITY_STATE_CHANGED,ACTIVITY_CONTEXT_CHANGED,
55          ACTIVITY_RESULT_CHANGED,ACTIVITY_ASSIGNMENT_CHANGED};
56
57    protected static final short DB_TYPE_BOOLEAN=0;
58    protected static final short DB_TYPE_LONG=1;
59    protected static final short DB_TYPE_DOUBLE=2;
60    protected static final short DB_TYPE_VCHAR=3;
61    protected static final short DB_TYPE_DATE=4;
62    protected static final short DB_TYPE_BLOB=5;
63    
64    protected static final int MAX_VCHAR_SIZE_LIMIT=4000;
65
66    protected static int max_vchar_size=4000;
67
68    protected CallbackUtilities cus;
69    protected Map _prStates;
70    protected Map _acStates;
71    protected Map _evTypes;
72
73    protected boolean usingStandardVariableDataModel=true;
74    protected boolean persistOldEventAuditData=true;
75    
76    public void configure (CallbackUtilities cus) throws RootException {
77       this.cus=cus;
78       String JavaDoc mvc=cus.getProperty("DODSEventAuditManager.maxVARCHARSize","4000");
79       try {
80          max_vchar_size=Integer.parseInt(mvc);
81          if (max_vchar_size>MAX_VCHAR_SIZE_LIMIT || max_vchar_size<1) {
82             max_vchar_size=MAX_VCHAR_SIZE_LIMIT;
83             cus.warn("Invalid value "+mvc+" for property DODSEventAuditManager.maxVARCHARSize. Using default value "+max_vchar_size);
84          }
85       } catch (Exception JavaDoc e) {
86          cus.warn("Invalid value "+mvc+" for property DODSEventAuditManager.maxVARCHARSize. Using default value "+max_vchar_size);
87       }
88
89       usingStandardVariableDataModel=new Boolean JavaDoc(cus.getProperty("DODSEventAuditManager.useStandardVariableDataModel","true")).booleanValue();
90       persistOldEventAuditData=new Boolean JavaDoc(cus.getProperty("PERSIST_OLD_EVENT_AUDIT_DATA","true")).booleanValue();
91       
92       _prStates = new HashMap();
93       _acStates = new HashMap();
94       _evTypes = new HashMap();
95       try {
96          try {
97             DODSUtilities.init(cus.getProperties());
98          }
99          catch (Throwable JavaDoc ex) {
100             ex.printStackTrace();
101          }
102          initActivityAndProcessStatesTable();
103          initEventTypesTable();
104       }
105       catch (Throwable JavaDoc tr) {
106          cus.error(LOG_CHANNEL,"Problem with registering database manager with DODS !", new RootException(tr));
107          throw new RootException("Problem with registering database manager with DODS !",tr);
108       }
109    }
110
111    /**
112     * Fills the state table with possible activity and process states. For now,
113     * the 'keyValue' and the 'name' attribute of state record has the same value,
114     * but in the future, if the names of states changes, it will be very easy
115     * to change this table entries without affecting other tables.
116     * NOTE: When new names are introduced, the getPersistentXXX that use it
117     * also has to be changed
118     */

119    protected void initActivityAndProcessStatesTable () throws EventAuditException {
120       DBTransaction t=null;
121       try {
122          t = DODS.getDatabaseManager().createTransaction();
123          for (int i=0; i<activityAndProcessStates.length; i++) {
124             String JavaDoc state=activityAndProcessStates[i];
125             ProcessStateEventAuditDO psDO=getPersistedProcessStateObject(state,true,t);
126             if (!psDO.isPersistent()) {
127                psDO.setKeyValue(state);
128             }
129             psDO.setName(state);
130             psDO.save(t);
131             _prStates.put(state, psDO.get_OId().toBigDecimal());
132             ActivityStateEventAuditDO asDO=getPersistedActivityStateObject(state,true,t);
133             if (!asDO.isPersistent()) {
134                asDO.setKeyValue(state);
135             }
136             asDO.setName(state);
137             asDO.save(t);
138             _acStates.put(state, asDO.get_OId().toBigDecimal());
139          }
140          t.commit();
141       }
142       catch (Throwable JavaDoc thr) {
143          throw new EventAuditException(thr);
144       }
145       finally {
146          try {
147             t.release();
148          } catch (Exception JavaDoc ex) {}
149       }
150    }
151
152    /**
153     * Fills the event type table with possible event types. For now,
154     * the 'keyValue' and the 'name' attribute of event type record has
155     * the same value, but in the future, if the names of event types changes,
156     * it will be very easy to change this table entries without affecting
157     * other tables.
158     * NOTE: When new names are introduced, the getPersistentXXX that use it
159     * also has to be changed
160     */

161    protected void initEventTypesTable () throws EventAuditException {
162       DBTransaction t=null;
163       try {
164          t = DODS.getDatabaseManager().createTransaction();
165          for (int i=0; i<eventTypes.length; i++) {
166             String JavaDoc eventType=eventTypes[i];
167             EventTypeDO etDO=getPersistedEventTypeObject(eventType,true,t);
168             if (!etDO.isPersistent()) {
169                etDO.setKeyValue(eventType);
170             }
171             etDO.setName(eventType);
172             etDO.save(t);
173             _evTypes.put(eventType, etDO.get_OId().toBigDecimal());
174          }
175          t.commit();
176       }
177       catch (Throwable JavaDoc thr) {
178          throw new EventAuditException(thr);
179       }
180       finally {
181          try {
182             t.release();
183          } catch (Exception JavaDoc ex) {}
184       }
185    }
186
187    public void persist(AssignmentEventAuditPersistenceInterface aea,SharkTransaction ti) throws EventAuditException {
188       try {
189          AssignmentEventAuditDO DO=AssignmentEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
190          // when these attributes are persisted - they never change
191
if (!DO.isPersistent()) {
192             DO.setUTCTime(aea.getUTCTime());
193             DO.oid_setTheType((BigDecimal JavaDoc)_evTypes.get(aea.getType()));
194             DO.setProcessId(aea.getProcessId());
195             DO.setActivityId(aea.getActivityId());
196             if (aea.getActivityName()!=null) {
197                DO.setActivityName(aea.getActivityName());
198             }
199             DO.setProcessName(aea.getProcessName());
200             DO.setProcessDefinitionName(aea.getProcessDefinitionName());
201             DO.setProcessDefinitionVersion(aea.getProcessDefinitionVersion());
202             if (aea.getActivityDefinitionId()!=null) {
203                DO.setActivityDefinitionId(aea.getActivityDefinitionId());
204                DO.setActivitySetDefinitionId(aea.getActivitySetDefinitionId());
205             }
206             DO.setProcessDefinitionId(aea.getProcessDefinitionId());
207             DO.setPackageId(aea.getPackageId());
208             DO.setNewResourceUsername(aea.getNewResourceUsername());
209             if (aea.getNewResourceName()!=null) {
210                DO.setNewResourceName(aea.getNewResourceName());
211             }
212             if (aea.getOldResourceUsername()!=null) {
213                DO.setOldResourceUsername(aea.getOldResourceUsername());
214             }
215             if (aea.getOldResourceName()!=null) {
216                DO.setOldResourceName(aea.getOldResourceName());
217             }
218             DO.setIsAccepted(aea.getIsAccepted());
219             DO.setCNT(getNextDecId("assignmenteventaudit"));
220             ((SharkDODSTransaction)ti).store(DO);
221          }
222          cus.info(LOG_CHANNEL,"AssignmentEventAudit[processId="+aea.getProcessId()+",activityId="+aea.getActivityId()+"] persisted");
223       }
224       catch (Throwable JavaDoc tr) {
225          cus.error(LOG_CHANNEL,"Persisting of AssignmentEventAudit failed");
226          //tr.printStackTrace();
227
throw new EventAuditException
228             ("Persisting of AssignmentEventAudit failed", tr);
229       }
230    }
231
232    public void persist(DataEventAuditPersistenceInterface dea,SharkTransaction ti) throws EventAuditException {
233       try {
234          DataEventAuditDO DO=DataEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
235          // when these attributes are persisted - they never change
236
if (!DO.isPersistent()) {
237             DO.setUTCTime(dea.getUTCTime());
238             DO.oid_setTheType((BigDecimal JavaDoc)_evTypes.get(dea.getType()));
239             DO.setProcessId(dea.getProcessId());
240             if (dea.getActivityId()!=null) {
241                DO.setActivityId(dea.getActivityId());
242             }
243             if (dea.getActivityName()!=null) {
244                DO.setActivityName(dea.getActivityName());
245             }
246             DO.setProcessName(dea.getProcessName());
247             DO.setProcessDefinitionName(dea.getProcessDefinitionName());
248             DO.setProcessDefinitionVersion(dea.getProcessDefinitionVersion());
249             if (dea.getActivityDefinitionId()!=null) {
250                DO.setActivityDefinitionId(dea.getActivityDefinitionId());
251                DO.setActivitySetDefinitionId(dea.getActivitySetDefinitionId());
252             }
253             DO.setProcessDefinitionId(dea.getProcessDefinitionId());
254             DO.setPackageId(dea.getPackageId());
255             DO.setCNT(getNextDecId("dataeventaudit"));
256             ((SharkDODSTransaction)ti).store(DO);
257             if (usingStandardVariableDataModel) {
258                if (persistOldEventAuditData) {
259                   persistOldEventAuditDataBLOB(dea,DO,ti);
260                }
261                persistNewEventAuditDataBLOB(dea,DO,ti);
262             } else {
263                if (persistOldEventAuditData) {
264                   persistOldEventAuditDataWOB(dea,DO,ti);
265                }
266                persistNewEventAuditDataWOB(dea,DO,ti);
267             }
268          }
269          if(dea.getActivityId()!=null) {
270             cus.info(LOG_CHANNEL,"DataEventAudit[processId="+dea.getProcessId()+",activityId="+dea.getActivityId()+"] persisted");
271          }
272          else {
273             cus.info(LOG_CHANNEL,"DataEventAudit[processId="+dea.getProcessId()+"] persisted");
274          }
275       }
276       catch (Throwable JavaDoc tr) {
277          cus.error(LOG_CHANNEL,"Persisting of DataEventAudit failed");
278          throw new EventAuditException
279             ("Persisting of DataEventAudit failed", tr);
280       }
281    }
282
283    public void persist(StateEventAuditPersistenceInterface sea,SharkTransaction ti) throws EventAuditException {
284       try {
285          StateEventAuditDO DO=StateEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
286          // when these attributes are persisted - they never change
287

288          if (!DO.isPersistent()) {
289             DO.setUTCTime(sea.getUTCTime());
290             DO.oid_setTheType((BigDecimal JavaDoc)_evTypes.get(sea.getType()));
291             DO.setProcessId(sea.getProcessId());
292             if (sea.getActivityId()!=null) {
293                DO.setActivityId(sea.getActivityId());
294                DO.oid_setNewActivityState((BigDecimal JavaDoc)_acStates.get(sea.getNewState()));
295                if (sea.getOldState()!=null) {
296                   DO.oid_setOldActivityState((BigDecimal JavaDoc)_acStates.get(sea.getOldState()));
297                }
298             }
299             else {
300                DO.oid_setNewProcessState((BigDecimal JavaDoc)_prStates.get(sea.getNewState()));
301                if (sea.getOldState()!=null) {
302                   DO.oid_setOldProcessState((BigDecimal JavaDoc)_prStates.get(sea.getOldState()));
303                }
304             }
305
306             if (sea.getActivityName()!=null) {
307                DO.setActivityName(sea.getActivityName());
308             }
309             DO.setProcessName(sea.getProcessName());
310             DO.setProcessDefinitionName(sea.getProcessDefinitionName());
311             DO.setProcessDefinitionVersion(sea.getProcessDefinitionVersion());
312             if (sea.getActivityDefinitionId()!=null) {
313                DO.setActivityDefinitionId(sea.getActivityDefinitionId());
314                DO.setActivitySetDefinitionId(sea.getActivitySetDefinitionId());
315             }
316             DO.setProcessDefinitionId(sea.getProcessDefinitionId());
317             DO.setPackageId(sea.getPackageId());
318             DO.setCNT(getNextDecId("stateeventaudit"));
319             ((SharkDODSTransaction)ti).store(DO);
320          }
321          if(sea.getActivityId()!=null) {
322             cus.info(LOG_CHANNEL,"StateEventAudit[processId="+sea.getProcessId()+",activityId="+sea.getActivityId()+"] persisted");
323          }
324          else {
325             cus.info(LOG_CHANNEL,"StateEventAudit[processId="+sea.getProcessId()+"] persisted");
326          }
327       }
328       catch (Throwable JavaDoc tr) {
329          cus.error(LOG_CHANNEL,"Persisting of StateEventAudit failed");
330          //tr.printStackTrace();
331
throw new EventAuditException
332             ("Persisting of StateEventAudit failed", tr);
333       }
334    }
335
336    public void persist(CreateProcessEventAuditPersistenceInterface cpea,SharkTransaction ti) throws EventAuditException {
337       try {
338          CreateProcessEventAuditDO DO=CreateProcessEventAuditDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
339          // when these attributes are persisted - they never change
340
if (!DO.isPersistent()) {
341             DO.setUTCTime(cpea.getUTCTime());
342             DO.oid_setTheType((BigDecimal JavaDoc)_evTypes.get(cpea.getType()));
343             DO.setProcessId(cpea.getProcessId());
344             DO.setProcessName(cpea.getProcessName());
345             DO.setProcessDefinitionId(cpea.getProcessDefinitionId());
346             DO.setProcessDefinitionName(cpea.getProcessDefinitionName());
347             DO.setProcessDefinitionVersion(cpea.getProcessDefinitionVersion());
348             DO.setPackageId(cpea.getPackageId());
349             if (cpea.getPProcessId()!=null) {
350                DO.setPProcessId(cpea.getPProcessId());
351             }
352             if (cpea.getPProcessName()!=null) {
353                DO.setPProcessName(cpea.getPProcessName());
354             }
355             if (cpea.getPActivityId()!=null) {
356                DO.setPActivityId(cpea.getPActivityId());
357             }
358             if (cpea.getPPackageId()!=null) {
359                DO.setPPackageId(cpea.getPPackageId());
360             }
361             if (cpea.getPProcessDefinitionId()!=null) {
362                DO.setPProcessDefinitionId(cpea.getPProcessDefinitionId());
363             }
364             if (cpea.getPActivityDefinitionId()!=null) {
365                DO.setPActivityDefinitionId(cpea.getPActivityDefinitionId());
366                DO.setPActivitySetDefinitionId(cpea.getPActivitySetDefinitionId());
367             }
368             if (cpea.getPProcessDefinitionName()!=null) {
369                DO.setPProcessDefinitionName(cpea.getPProcessDefinitionName());
370             }
371             if (cpea.getPProcessDefinitionVersion()!=null) {
372                DO.setPProcessDefinitionVersion(cpea.getPProcessDefinitionVersion());
373             }
374             DO.setCNT(getNextDecId("createprocesseventaudit"));
375             ((SharkDODSTransaction)ti).store(DO);
376          }
377          cus.info(LOG_CHANNEL,"CreateProcessEventAudit[processId="+cpea.getProcessId()+"] persisted");
378       }
379       catch (Throwable JavaDoc tr) {
380          cus.error(LOG_CHANNEL,"Persisting of CreateProcessEventAudit failed");
381          throw new EventAuditException
382             ("Persisting of CreateProcessEventAudit failed", tr);
383       }
384    }
385
386    protected void persistOldEventAuditDataBLOB (DataEventAuditPersistenceInterface dea,
387                                           DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException {
388       try {
389          Map od=dea.getOldData();
390          if (null != od) {
391             Iterator it=od.entrySet().iterator();
392             while (it.hasNext()) {
393                Map.Entry me=(Map.Entry)it.next();
394                String JavaDoc vdId=(String JavaDoc)me.getKey();
395                Object JavaDoc val=me.getValue();
396                OldEventAuditDataDO oedDO=OldEventAuditDataDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
397                oedDO.setDataEventAudit(deaDO);
398                oedDO.setVariableDefinitionId(vdId);
399
400                boolean isBLOB=false;
401                if (val instanceof Boolean JavaDoc) {
402                   oedDO.setVariableValueBOOL(((Boolean JavaDoc)val).booleanValue());
403                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN);
404                } else if (val instanceof Long JavaDoc) {
405                   oedDO.setVariableValueLONG(((Long JavaDoc)val).longValue());
406                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG);
407                } else if (val instanceof String JavaDoc) {
408                   String JavaDoc sv=(String JavaDoc)val;
409                   if (sv.length()<=max_vchar_size) {
410                      oedDO.setVariableValueVCHAR(sv);
411                      oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR);
412                   } else {
413                      isBLOB=true;
414                   }
415                } else if (val instanceof Double JavaDoc) {
416                   oedDO.setVariableValueDBL(((Double JavaDoc)val).doubleValue());
417                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE);
418                } else if (val instanceof java.util.Date JavaDoc) {
419                   oedDO.setVariableValueDATE(new java.sql.Timestamp JavaDoc(((java.util.Date JavaDoc)val).getTime()));
420                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE);
421                } else if (val==null) {
422                   short vt=oedDO.getVariableType();
423                   if (vt==DODSEventAuditManager.DB_TYPE_DATE) {
424                      oedDO.setVariableValueDATE(null);
425                   } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) {
426                      oedDO.setVariableValueVCHAR(null);
427                   } else {
428                      oedDO.setVariableValue(null);
429                      oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
430                   }
431                } else {
432                   isBLOB=true;
433                }
434
435                if (isBLOB) {
436                   oedDO.setVariableValue(MiscUtilities.serialize(val));
437                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
438                }
439
440                ((SharkDODSTransaction)ti).store(oedDO);
441             }
442          }
443       }
444       catch (Throwable JavaDoc tr) {
445          cus.error(LOG_CHANNEL,"Persisting of OldEventAuditData failed");
446          throw new EventAuditException
447             ("Persisting of OldEventAuditData failed", tr);
448       }
449    }
450
451    protected void persistOldEventAuditDataWOB (DataEventAuditPersistenceInterface dea,
452          DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException {
453    
454       try {
455          Map od=dea.getOldData();
456          if (null != od) {
457             Iterator it=od.entrySet().iterator();
458             while (it.hasNext()) {
459                Map.Entry me=(Map.Entry)it.next();
460                String JavaDoc vdId=(String JavaDoc)me.getKey();
461                Object JavaDoc val=me.getValue();
462                OldEventAuditDataWOBDO oedDO=OldEventAuditDataWOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
463                oedDO.setDataEventAudit(deaDO);
464                oedDO.setVariableDefinitionId(vdId);
465
466                boolean isBLOB=false;
467                if (val instanceof Boolean JavaDoc) {
468                   oedDO.setVariableValueBOOL(((Boolean JavaDoc)val).booleanValue());
469                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN);
470                } else if (val instanceof Long JavaDoc) {
471                   oedDO.setVariableValueLONG(((Long JavaDoc)val).longValue());
472                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG);
473                } else if (val instanceof String JavaDoc) {
474                   String JavaDoc sv=(String JavaDoc)val;
475                   if (sv.length()<=max_vchar_size) {
476                      oedDO.setVariableValueVCHAR(sv);
477                      oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR);
478                   } else {
479                      isBLOB=true;
480                   }
481                } else if (val instanceof Double JavaDoc) {
482                   oedDO.setVariableValueDBL(((Double JavaDoc)val).doubleValue());
483                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE);
484                } else if (val instanceof java.util.Date JavaDoc) {
485                   oedDO.setVariableValueDATE(new java.sql.Timestamp JavaDoc(((java.util.Date JavaDoc)val).getTime()));
486                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE);
487                } else if (val==null) {
488                   short vt=oedDO.getVariableType();
489                   if (vt==DODSEventAuditManager.DB_TYPE_DATE) {
490                      oedDO.setVariableValueDATE(null);
491                   } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) {
492                      oedDO.setVariableValueVCHAR(null);
493                   } else {
494                      OldEventAuditDataBLOBDO bDO=OldEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
495                      bDO.setOldEventAuditDataWOB(oedDO);
496                      bDO.setVariableValue(null);
497                      oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
498                      ((SharkDODSTransaction)ti).store(bDO);
499                   }
500                } else {
501                   isBLOB=true;
502                }
503
504                if (isBLOB) {
505                   OldEventAuditDataBLOBDO bDO=OldEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
506                   bDO.setOldEventAuditDataWOB(oedDO);
507                   bDO.setVariableValue(MiscUtilities.serialize(val));
508                   oedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
509                   ((SharkDODSTransaction)ti).store(bDO);
510                }
511
512                ((SharkDODSTransaction)ti).store(oedDO);
513             }
514          }
515       }
516       catch (Throwable JavaDoc tr) {
517          cus.error(LOG_CHANNEL,"Persisting of OldEventAuditData failed");
518          throw new EventAuditException
519             ("Persisting of OldEventAuditData failed", tr);
520       }
521    }
522    
523    protected void persistNewEventAuditDataBLOB (DataEventAuditPersistenceInterface dea,
524                                           DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException {
525       try {
526          Map nd=dea.getNewData();
527          Iterator it=nd.entrySet().iterator();
528          while (it.hasNext()) {
529             Map.Entry me=(Map.Entry)it.next();
530             String JavaDoc vdId=(String JavaDoc)me.getKey();
531             Object JavaDoc val= me.getValue();
532             NewEventAuditDataDO nedDO=NewEventAuditDataDO .createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
533             nedDO.setDataEventAudit(deaDO);
534             nedDO.setVariableDefinitionId(vdId);
535
536             boolean isBLOB=false;
537             if (val instanceof Boolean JavaDoc) {
538                nedDO.setVariableValueBOOL(((Boolean JavaDoc)val).booleanValue());
539                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN);
540             } else if (val instanceof Long JavaDoc) {
541                nedDO.setVariableValueLONG(((Long JavaDoc)val).longValue());
542                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG);
543             } else if (val instanceof String JavaDoc) {
544                String JavaDoc sv=(String JavaDoc)val;
545                if (sv.length()<=max_vchar_size) {
546                   nedDO.setVariableValueVCHAR(sv);
547                   nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR);
548                } else {
549                   isBLOB=true;
550                }
551             } else if (val instanceof Double JavaDoc) {
552                nedDO.setVariableValueDBL(((Double JavaDoc)val).doubleValue());
553                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE);
554             } else if (val instanceof java.util.Date JavaDoc) {
555                nedDO.setVariableValueDATE(new java.sql.Timestamp JavaDoc(((java.util.Date JavaDoc)val).getTime()));
556                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE);
557             } else if (val==null) {
558                short vt=nedDO.getVariableType();
559                if (vt==DODSEventAuditManager.DB_TYPE_DATE) {
560                   nedDO.setVariableValueDATE(null);
561                } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) {
562                   nedDO.setVariableValueVCHAR(null);
563                } else {
564                   nedDO.setVariableValue(null);
565                   nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
566                }
567             } else {
568                isBLOB=true;
569             }
570
571             if (isBLOB) {
572                nedDO.setVariableValue(MiscUtilities.serialize(val));
573                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
574             }
575
576             ((SharkDODSTransaction)ti).store(nedDO);
577          }
578       }
579       catch (Throwable JavaDoc tr) {
580          cus.error(LOG_CHANNEL,"Persisting of NewEventAuditData failed");
581          throw new EventAuditException
582             ("Persisting of NewEventAuditData failed", tr);
583       }
584    }
585
586    protected void persistNewEventAuditDataWOB (DataEventAuditPersistenceInterface dea,
587          DataEventAuditDO deaDO,SharkTransaction ti) throws EventAuditException {
588
589       try {
590          Map nd=dea.getNewData();
591          Iterator it=nd.entrySet().iterator();
592          while (it.hasNext()) {
593             Map.Entry me=(Map.Entry)it.next();
594             String JavaDoc vdId=(String JavaDoc)me.getKey();
595             Object JavaDoc val= me.getValue();
596             NewEventAuditDataWOBDO nedDO=NewEventAuditDataWOBDO .createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
597             nedDO.setDataEventAudit(deaDO);
598             nedDO.setVariableDefinitionId(vdId);
599
600             boolean isBLOB=false;
601             if (val instanceof Boolean JavaDoc) {
602                nedDO.setVariableValueBOOL(((Boolean JavaDoc)val).booleanValue());
603                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BOOLEAN);
604             } else if (val instanceof Long JavaDoc) {
605                nedDO.setVariableValueLONG(((Long JavaDoc)val).longValue());
606                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_LONG);
607             } else if (val instanceof String JavaDoc) {
608                String JavaDoc sv=(String JavaDoc)val;
609                if (sv.length()<=max_vchar_size) {
610                   nedDO.setVariableValueVCHAR(sv);
611                   nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_VCHAR);
612                } else {
613                   isBLOB=true;
614                }
615             } else if (val instanceof Double JavaDoc) {
616                nedDO.setVariableValueDBL(((Double JavaDoc)val).doubleValue());
617                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DOUBLE);
618             } else if (val instanceof java.util.Date JavaDoc) {
619                nedDO.setVariableValueDATE(new java.sql.Timestamp JavaDoc(((java.util.Date JavaDoc)val).getTime()));
620                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_DATE);
621             } else if (val==null) {
622                short vt=nedDO.getVariableType();
623                if (vt==DODSEventAuditManager.DB_TYPE_DATE) {
624                   nedDO.setVariableValueDATE(null);
625                } else if (vt==DODSEventAuditManager.DB_TYPE_VCHAR) {
626                   nedDO.setVariableValueVCHAR(null);
627                } else {
628                   NewEventAuditDataBLOBDO bDO=NewEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
629                   bDO.setNewEventAuditDataWOB(nedDO);
630                   bDO.setVariableValue(null);
631
632                   nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
633                   ((SharkDODSTransaction)ti).store(bDO);
634                }
635             } else {
636                isBLOB=true;
637             }
638
639             if (isBLOB) {
640                NewEventAuditDataBLOBDO bDO=NewEventAuditDataBLOBDO.createVirgin(((SharkDODSTransaction)ti).getDODSTransaction());
641                bDO.setNewEventAuditDataWOB(nedDO);
642                bDO.setVariableValue(MiscUtilities.serialize(val));
643                nedDO.setVariableType(DODSEventAuditManager.DB_TYPE_BLOB);
644                ((SharkDODSTransaction)ti).store(bDO);
645             }
646
647             ((SharkDODSTransaction)ti).store(nedDO);
648          }
649       }
650       catch (Throwable JavaDoc tr) {
651          cus.error(LOG_CHANNEL,"Persisting of NewEventAuditData failed");
652          throw new EventAuditException
653             ("Persisting of NewEventAuditData failed", tr);
654       }
655    }
656