| 1 2 41 42 43 package jspPhoneBook.data; 44 45 import java.io.*; 46 import java.sql.*; 47 import java.math.*; 48 import java.util.Hashtable ; 49 import java.util.Collection ; 50 import java.util.Properties ; 51 import java.io.FileInputStream ; 52 import java.util.Vector ; 53 import java.util.Map ; 54 import java.util.HashSet ; 55 import java.util.HashMap ; 56 import java.util.Iterator ; 57 import java.lang.reflect.Method ; 58 59 import com.lutris.logging.LogChannel; 60 import com.lutris.logging.Logger; 61 import org.enhydra.dods.DODS; 62 import com.lutris.util.Config; 63 import com.lutris.util.ConfigException; 64 import com.lutris.appserver.server.sql.*; 65 import com.lutris.appserver.server.sql.standard.*; 66 import com.lutris.dods.builder.generator.dataobject.*; 67 import com.lutris.dods.builder.generator.query.*; 68 import org.enhydra.dods.cache.Condition; 69 import org.enhydra.dods.cache.DataStructCache; 70 import org.enhydra.dods.cache.QueryCache; 71 import org.enhydra.dods.cache.QueryCacheImpl; 72 import org.enhydra.dods.cache.QueryResult; 73 import org.enhydra.dods.cache.ConfigurationAdministration; 74 import org.enhydra.dods.statistics.Statistics; 75 import com.lutris.classloader.MultiClassLoader; 76 import org.enhydra.xml.XMLConfig; 77 import org.enhydra.dods.Common; 78 import org.enhydra.dods.cache.CacheConstants; 79 import org.enhydra.dods.exceptions.AssertionDataObjectException; 80 import org.enhydra.dods.exceptions.CacheObjectException; 81 82 83 84 91 public class PersonDO extends com.lutris.dods.builder.generator.dataobject.GenericDO implements PersonDOI, java.io.Serializable { 92 128 static public final RDBTable table = new RDBTable( "person" ); 129 130 133 private HashMap refs = null; 134 135 136 139 protected String originDatabase = null; 140 141 142 149 public String getOriginDatabase() { 150 return get_OriginDatabase(); 151 } 152 153 159 public String get_OriginDatabase() { 160 return get_DataStruct().get_Database(); 161 } 162 163 174 public String getTableName() { 175 return "person"; 176 } 177 178 182 static public final RDBColumn PrimaryKey = new RDBColumn( table, get_primaryKeyName() ); 183 184 185 186 187 205 static protected final boolean notUsingOId = false; 206 207 208 215 private PersonDataStruct data = null; 216 217 222 private DBTransaction transaction = null; 223 224 230 public DBTransaction get_transaction() { 231 return transaction; 232 } 233 234 240 protected boolean setTransaction(DBTransaction trans) { 241 boolean isOK=false; 242 if (get_transaction() == null) { 243 transaction = trans; 244 isOK=true; 245 } else { 246 if(get_transaction().equals(trans)) 247 isOK=true; 248 } 249 return isOK; 250 } 251 252 253 259 public boolean isReadOnly() { 260 return getConfigurationAdministration().getTableConfiguration().isReadOnly(); 261 } 262 263 267 public void setData (Object data) { 268 set_Data(data); 269 } 270 271 274 public void set_Data (Object data) { 275 this.data = (PersonDataStruct)data; 276 } 277 278 281 public void originalData_set (Object data) { 282 originalData = (PersonDataStruct)data; 283 } 284 285 289 public Object getData () { 290 return get_Data(); 291 } 292 293 296 public Object get_Data () { 297 return (null != data)? data : originalData; 298 } 299 300 304 public PersonDataStruct getDataStruct () { 305 return get_DataStruct(); 306 } 307 308 311 public PersonDataStruct get_DataStruct () { 312 return (PersonDataStruct) get_Data(); 313 } 314 315 318 public Object originalData_get () { 319 return originalData; 320 } 321 322 public void checkDup () throws DatabaseManagerException, com.lutris.appserver.server.sql.ObjectIdException { 323 if (isDeletedFromDatabase) 324 throw new DatabaseManagerException("Object "+get_OId()+" is deleted"); 325 if (null == data) { 326 data = ((PersonDataStruct)originalData).duplicate(); 327 data.readOnly = false; 328 } 329 } 330 331 341 protected PersonDO ( boolean is_view ) 342 throws ObjectIdException, DatabaseManagerException { 343 super( is_view ); 344 if(isTransactionCheck()) { 345 String trace=""; 346 StackTraceElement [] traceElements= (new Throwable ()).getStackTrace(); 347 for(int i=0; i < traceElements.length; i++) 348 trace+=traceElements[i].toString()+"\n"; 349 DODS.getLogChannel().write(Logger.WARNING, "DO without transaction context is created :"+(is_view?"":" Database: "+get_OriginDatabase()+" PersonDO class, oid: "+get_OId()+", version: "+get_Version())+" \n"+trace); 350 } 351 } 352 363 protected PersonDO ( boolean is_view, DBTransaction dbTrans ) 364 throws ObjectIdException, DatabaseManagerException { 365 super( is_view ); 366 setTransaction(dbTrans); 367 if(dbTrans!=null) { 368 originDatabase = dbTrans.getDatabaseName(); 369 } 370 if(originDatabase==null) 371 originDatabase = get_logicalDBName(); 372 get_DataStruct().set_Database(originDatabase); 373 addToTransactionCache(); 374 375 } 376 377 378 386 protected PersonDO () 387 throws ObjectIdException, DatabaseManagerException { 388 super( notUsingOId ); 389 originDatabase = get_logicalDBName(); 390 get_DataStruct().set_Database(originDatabase); 391 if(isTransactionCheck()) { 392 String trace=""; 393 StackTraceElement [] traceElements= (new Throwable ()).getStackTrace(); 394 for(int i=0; i < traceElements.length; i++) 395 trace+=traceElements[i].toString()+"\n"; 396 DODS.getLogChannel().write(Logger.WARNING, "DO without transaction context is created : Database: "+get_OriginDatabase()+" PersonDO class, oid: "+get_OId()+", version: "+get_Version()+" \n"+trace); 397 } 398 if (autoSaveAllowed&&isAutoSaveCreateVirgin()&&null != transaction) { 399 try { 400 save(transaction,false); 401 } catch (Exception ex) { 402 DODS.getLogChannel().write(Logger.DEBUG,"Faild to AutoSave virgin DO: "+get_OriginDatabase()+" PersonDO class\n"); 403 } 404 } 405 } 406 407 415 protected PersonDO (DBTransaction dbTrans) 416 throws ObjectIdException, DatabaseManagerException { 417 super( notUsingOId ); 418 setTransaction(dbTrans); 419 if(dbTrans!=null) { 420 originDatabase = dbTrans.getDatabaseName(); 421 } 422 if(originDatabase==null) 423 originDatabase = get_logicalDBName(); 424 get_DataStruct().set_Database(originDatabase); 425 426 addToTransactionCache(); 427 if (autoSaveAllowed&&isAutoSaveCreateVirgin()&&null != transaction) { 428 try { 429 save(transaction,false); 430 } catch (Exception ex) { 431 DODS.getLogChannel().write(Logger.DEBUG,"Faild to AutoSave virgin DO: "+get_OriginDatabase()+" PersonDO class\n"); 432 } 433 } 434 } 435 436 437 438 444 public boolean isLoaded() { 445 return (null != originalData)&&(!get_DataStruct().isEmpty); 446 } 447 448 449 460 public void loadData() 461 throws SQLException, ObjectIdException, DataObjectException { 462 if (null == originalData&&!get_DataStruct().isEmpty) { 463 originalData = new PersonDataStruct (); 464 } 465 466 ObjectId id = get_OId(); 467 if ( null == id ) 468 return; 469 if ( ! isPersistent() ) return; 471 PersonQuery query; 473 474 query = new PersonQuery (get_transaction()); 475 476 query.setRefs(get_refs()); 479 query.setQueryOId( id ); 481 query.requireUniqueInstance(); 482 query.setLoadData(true); 483 PersonDO obj; 484 try { 485 obj = query.getNextDO(); 486 if ( null == obj ) 487 throw new DataObjectException("PersonDO DO not found for id=" + id ); 488 makeIdentical(obj); 489 set_Version( obj.get_Version() ); 490 get_DataStruct().isEmpty = false; 491 } catch ( NonUniqueQueryException e ) { 492 throw new ObjectIdException( "Duplicate ObjectId" ); 493 } 494 495 } 496 497 503 protected void checkLoad() 504 throws DataObjectException { 505 if (null == originalData||get_DataStruct().isEmpty) { 506 try { 507 loadData(); 508 } catch ( Exception e ) { 509 throw new DataObjectException("Unable to load data for PersonDO id=" + get_OId() + 510 ", error = ", e); 511 } 512 } 513 } 514 515 516 531 protected PersonDO( ObjectId id ) 532 throws SQLException, ObjectIdException, DataObjectException, DatabaseManagerException { 533 super( id ); 534 originDatabase = get_logicalDBName(); 535 get_DataStruct().set_Database(originDatabase); 536 if(isTransactionCheck()) { 537 String trace=""; 538 StackTraceElement [] traceElements= (new Throwable ()).getStackTrace(); 539 for(int i=0; i < traceElements.length; i++) 540 trace+=traceElements[i].toString()+"\n"; 541 DODS.getLogChannel().write(Logger.WARNING, "DO without transaction context is created : Database: "+get_OriginDatabase()+" PersonDO class, oid: "+get_OId()+", version: "+get_Version()+" \n"+trace); 542 } 543 544 } 545 546 561 protected PersonDO( ObjectId id , DBTransaction dbTrans) 562 throws SQLException, ObjectIdException, DataObjectException, DatabaseManagerException { 563 super( id ); 564 setTransaction(dbTrans); 565 if(dbTrans!=null) { 566 originDatabase = dbTrans.getDatabaseName(); 567 } 568 if(originDatabase==null) 569 originDatabase = get_logicalDBName(); 570 get_DataStruct().set_Database(originDatabase); 571 addToTransactionCache(); 572 } 573 574 575 576 577 580 protected static Statistics statistics; 581 582 587 public static Statistics get_statistics() { 588 statistics = cache.getStatistics(); 589 return statistics; 590 } 591 592 595 public static void refreshStatistics() { 596 cache.refreshStatistics(); 597 } 598 599 600 607 public static String [] getUsedLogicalDatabases() { 608 return get_UsedLogicalDatabases(); 609 } 610 611 617 public static String [] get_UsedLogicalDatabases() { 618 String [] str = { get_logicalDBName() }; 619 return str; 620 } 621 622 623 protected static DataStructCache cache; 625 629 public static void readCacheConfiguration(String database) throws CacheObjectException { 630 if (getConfigurationAdministration().isDisabled()) { 631 throw new CacheObjectException("Caching is disabled"); 632 } 633 Config tableConfig = null; 634 Config cacheConfig = null; 635 try { 636 tableConfig = (Config)DODS.getDatabaseManager().getConfig().getSection("DB."+database+".person"); 637 } catch (Exception ex) { 638 } 639 try { 640 cacheConfig = (Config)DODS.getDatabaseManager().getConfig().getSection("DB."+database+".person.cache"); 641 } catch ( Exception e ) { 642 } 643 644 cache.readConfiguration(tableConfig,cacheConfig, database); 645 } 646 647 648 653 public static String getCacheDodsTableName() { 654 return "person"; 655 } 656 657 658 663 public static ConfigurationAdministration getConfigurationAdministration() { 664 return cache; 665 } 666 667 683 public static void refreshCache() 684 throws java.sql.SQLException , DatabaseManagerException, ObjectIdException, DataObjectException { 685 getConfigurationAdministration().getCacheAdministration(CacheConstants.DATA_CACHE).refresh(); 686 String querySnt = cache.getInitialQueryCache(); 687 int maxSize = 0; 688 cache.checkFull(); 689 if (querySnt != null) { 690 PersonQuery query; 691 692 query = new PersonQuery ((DBTransaction)null); 693 query.hitDatabase(); 694 maxSize = cache.getCacheAdministration(CacheConstants.DATA_CACHE).getMaxCacheSize(); 695 if (maxSize > 0) 696 try { 697 query.setMaxRows(maxSize); 698 } 699 catch (NonUniqueQueryException nuEx){ 700 System.out.println ("NonUniqueQueryException in refreshCache() method : too many rows were found."); 701 } 702 if (!querySnt.equals("*") ) { 703 QueryBuilder builder = query.getQueryBuilder(); 704 builder.addWhere(querySnt); 705 } 706 PersonDO obj; 707 try { 708 query.setLoadData(true); 709 query.getNextDO(); 710 } catch ( NonUniqueQueryException ex ) { 711 throw new ObjectIdException( "Duplicate ObjectId" ); 714 } 715 716 } 717 cache.refreshStatistics(); 718 } 719 720 private static boolean isDisabledCaching = false; 721 722 725 public static void disableCaching() 726 throws java.sql.SQLException , DatabaseManagerException, ObjectIdException, DataObjectException { 727 isDisabledCaching = true; 728 getConfigurationAdministration().getCacheAdministration(CacheConstants.DATA_CACHE).disable(); 729 } 730 731 734 public static void enableCaching() 735 throws java.sql.SQLException , DatabaseManagerException, ObjectIdException, DataObjectException { 736 if (isDisabledCaching){ 737 getConfigurationAdministration().getCacheAdministration(CacheConstants.DATA_CACHE).enable(); 738 String querySnt = cache.getInitialQueryCache(); 739 if (querySnt != null) { 740 PersonQuery query; 741 742 query = new PersonQuery ((DBTransaction)null); 743 query.hitDatabase(); 744 if (!querySnt.equals("*") ) { 745 QueryBuilder builder = query.getQueryBuilder(); 746 builder.addWhere(querySnt); 747 } 748 PersonDO obj; 749 try { 750 query.getNextDO(); 751 } catch ( NonUniqueQueryException ex ) { 752 throw new ObjectIdException( "Duplicate ObjectId" ); 755 } 756 757 } 758 } 759 } 760 private static StandardDBTransaction _tr_(DBTransaction dbt) { 761 return (StandardDBTransaction)dbt; 762 } 763 764 774 private PersonDO addToTransactionCache( PersonDO newDO ) { 775 PersonDO ret = null; 776 if(get_transaction()!=null && _tr_(get_transaction()).getTransactionCache()!=null) { 777 ret = (PersonDO)_tr_(get_transaction()).getTransactionCache().addDO(newDO); 778 } 779 if (ret == null) 780 return newDO; 781 return ret; 782 } 783 784 792 public static synchronized PersonDataStruct addToCache( PersonDataStruct newDS ) { 793 PersonDataStruct ret = (PersonDataStruct)cache.addDataStruct(newDS); 794 if (ret == null) 795 return newDS; 796 return ret; 797 } 798 799 802 public void addToCache() { 803 addToCache((PersonDataStruct)this.originalData_get()); 804 } 805 806 812 private void addToTransactionCache() { 813 addToTransactionCache(this); 814 } 815 816 817 822 public static synchronized PersonDataStruct updateCache( PersonDataStruct updDS) { 823 PersonDataStruct ret = (PersonDataStruct)cache.updateDataStruct(updDS); 824 if (ret == null) 825 return updDS; 826 return ret; 827 } 828 829 832 public void updateCache() { 833 updateCache((PersonDataStruct)this.originalData_get()); 834 } 835 836 843 public static synchronized PersonDataStruct deleteFromCache( PersonDataStruct data ) { 844 cache.deleteDataStruct(data); 845 return data; 846 } 847 848 849 856 public static synchronized void removeFromCache(String dbName, String handle) { 857 String cacheHandle = dbName+"."+handle; 858 cache.removeDataStruct( cacheHandle ); 859 } 860 861 864 public void deleteFromCache() { 865 deleteFromCache((PersonDataStruct)this.originalData_get()); 866 } 867 868 869 877 public static synchronized PersonDataStruct removeFromCache( PersonDataStruct data ) { 878 return (PersonDataStruct)cache.removeDataStruct(data); 879 } 880 881 884 public void evict() { 885 if (!isPersistent()) 886 removeFromCache((PersonDataStruct)this.originalData_get()); 887 } 888 889 894 public static void evict(PersonDataStruct[] DSs) { 895 for (int i=0; i<DSs.length; i++) 896 removeFromCache((PersonDataStruct) DSs[i]); 897 } 898 899 907 public static void evict(String dbName, String [] handles) { 908 if (handles!=null) { 909 for (int i=0; i<handles.length; i++) 910 removeFromCache(dbName, handles[i]); 911 } 912 } 913 914 922 923 927 static { 928 try { 929 XMLConfig dodsConf = Common.getDodsConf(); 930 String cacheClassPath = null; 931 String cacheClassName = null; 932 try { 933 cacheClassPath = dodsConf.getText("CacheJar"); 934 cacheClassName = dodsConf.getText("CacheClassName"); 935 if (cacheClassPath != null && cacheClassName != null) { 936 MultiClassLoader loader = new MultiClassLoader(null); 937 loader.setClassPath(cacheClassPath); 938 Class cacheClass = loader.loadClass(cacheClassName); 939  
|