1 21 package com.db4o; 22 23 import java.io.*; 24 import java.lang.reflect.*; 25 import java.util.*; 26 27 import com.db4o.ext.*; 28 29 class JDK_1_4 extends JDK_1_3 { 30 31 private Hashtable fileLocks; 32 33 private Object reflectionFactory; 34 private Constructor objectConstructor; 35 private Method factoryMethod; 36 37 synchronized void lockFile(Object file) { 38 Object channel = invoke(file, "getChannel", null, null); 39 Object fl = invoke(channel, "tryLock", null, null); 40 if(fl == null){ 41 throw new DatabaseFileLockedException(); 42 } 43 if(fileLocks == null){ 44 fileLocks = new Hashtable(); 45 } 46 fileLocks.put(file, fl); 47 } 48 49 synchronized void unlockFile(Object file) { 50 if(fileLocks != null){ 51 Object fl = fileLocks.get(file); 52 if(fl != null){ 53 invoke(fl, "release", null, null); 54 fileLocks.remove(file); 55 } 56 } 57 } 58 59 public Constructor serializableConstructor(Class clazz){ 60 if(reflectionFactory == null){ 61 if(! initSerializableConstructor()){ 62 Platform4.callConstructorCheck = YapConst.YES; 63 return null; 64 } 65 } 66 try{ 67 return (Constructor) factoryMethod.invoke(reflectionFactory, new Object []{clazz, objectConstructor}); 68 }catch(Exception e){ 69 } 70 return null; 71 } 72 73 boolean initSerializableConstructor(){ 74 reflectionFactory = invoke(Platform4.REFLECTIONFACTORY, "getReflectionFactory", null,null, null); 75 if(reflectionFactory == null){ 76 return false; 77 } 78 factoryMethod = getMethod(Platform4.REFLECTIONFACTORY, "newConstructorForSerialization", new Class []{Class .class, Constructor.class}); 79 if(factoryMethod == null){ 80 return false; 81 } 82 try{ 83 objectConstructor = Object .class.getDeclaredConstructor((Class [])null); 84 }catch(Exception e){ 85 e.printStackTrace(); 86 } 87 return true; 88 } 89 90 91 92 public int ver(){ 93 return 4; 94 } 95 96 } 97 | Popular Tags |