You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ba...@apache.org on 2004/03/15 01:32:20 UTC

cvs commit: db-ojb/src/test/org/apache/ojb/broker/metadata RuntimeConfigurationTest.java

baserose    2004/03/14 16:32:20

  Modified:    src/java/org/apache/ojb/broker/metadata
                        AttributeDescriptorBase.java ClassDescriptor.java
                        RepositoryXmlHandler.java
               src/java/org/apache/ojb/broker/metadata/fieldaccess
                        PersistentFieldFactory.java
               src/test/org/apache/ojb/broker/metadata
                        RuntimeConfigurationTest.java
  Log:
  Implementing PersistentField per Class descriptors.
  
  If you use the attribute 'persistent-field-class' on your class descriptor, all
  fields on that class desc will use the configured PersistentField,
  Class desc without that attribute will use the PersistentField
  configured @ OJB.properties
  
  Revision  Changes    Path
  1.16      +6 -1      db-ojb/src/java/org/apache/ojb/broker/metadata/AttributeDescriptorBase.java
  
  Index: AttributeDescriptorBase.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/AttributeDescriptorBase.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- AttributeDescriptorBase.java	11 Mar 2004 18:16:10 -0000	1.15
  +++ AttributeDescriptorBase.java	15 Mar 2004 00:32:20 -0000	1.16
  @@ -50,6 +50,11 @@
           m_PersistentField = PersistentFieldFactory.createPersistentField(c, fieldname);
       }
   
  +	public void setPersistentField(PersistentField pf)
  +	{
  +		m_PersistentField = pf;
  +	}
  +
       /**
        *
        */
  
  
  
  1.81      +22 -2     db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java
  
  Index: ClassDescriptor.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java,v
  retrieving revision 1.80
  retrieving revision 1.81
  diff -u -r1.80 -r1.81
  --- ClassDescriptor.java	11 Mar 2004 18:16:10 -0000	1.80
  +++ ClassDescriptor.java	15 Mar 2004 00:32:20 -0000	1.81
  @@ -70,7 +70,9 @@
   public final class ClassDescriptor extends DescriptorBase
       implements Serializable, XmlCapable, IsolationLevels
   {
  -	private static final long serialVersionUID = -5212253607374173965L;
  +	private String persistentFieldClassName;
  +
  +    private static final long serialVersionUID = -5212253607374173965L;
   
       public static final String OJB_CONCRETE_CLASS = "ojbConcreteClass";
       private static final Class[] NO_PARAMS = {};
  @@ -2042,5 +2044,23 @@
                      getStatementsForClass(conMan.getConnectionDescriptor(), this);
           }
           return statementsForClass;
  +    }
  +
  +
  +    /**
  +     * @param pfClassName
  +     */
  +    public void setPersistentFieldClassName(String pfClassName)
  +    {
  +		this.persistentFieldClassName = pfClassName;
  +    }
  +
  +
  +    /**
  +     * @return
  +     */
  +    public String getPersistentFieldClassName()
  +    {
  +		return persistentFieldClassName;
       }
   }
  
  
  
  1.55      +16 -6     db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java
  
  Index: RepositoryXmlHandler.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- RepositoryXmlHandler.java	11 Mar 2004 18:16:11 -0000	1.54
  +++ RepositoryXmlHandler.java	15 Mar 2004 00:32:20 -0000	1.55
  @@ -17,6 +17,8 @@
   
   import org.apache.ojb.broker.accesslayer.QueryCustomizer;
   import org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldHelper;
  +import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
  +import org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldFactory;
   import org.apache.ojb.broker.util.ClassHelper;
   import org.apache.ojb.broker.util.logging.Logger;
   import org.apache.ojb.broker.util.logging.LoggerFactory;
  @@ -36,7 +38,7 @@
    * metadata, one for pc object metadata.
    * </p>
    * @author <a href="mailto:thma@apache.org">Thomas Mahler<a>
  - * @author Jakob Br�uchi
  + * @author Jakob Br?uchi
    * @version $Id$
    */
   public class RepositoryXmlHandler
  @@ -308,6 +310,10 @@
                           b = (Boolean.valueOf(refresh)).booleanValue();
                           m_CurrentCLD.setAlwaysRefresh(b);
   
  +						// persistent field
  +						String pfClassName = atts.getValue("persistent-field-class");
  +						if (isDebug) logger.debug("     persistent-field-class: " + pfClassName);
  +						m_CurrentCLD.setPersistentFieldClassName(pfClassName);
   
                           break;
                       }
  @@ -369,12 +375,14 @@
   
                           if (RepositoryElements.TAG_ACCESS_ANONYMOUS.equalsIgnoreCase(strAccess))
                           {
  -                            m_CurrentFLD.setPersistentField(null, fieldName);
  +							AnonymousFieldDescriptor anonymous = (AnonymousFieldDescriptor) m_CurrentFLD; 
  +                            anonymous.setPersistentField(null,fieldName);
                           }
                           else
                           {
                               String classname = m_CurrentCLD.getClassNameOfObject();
  -                            m_CurrentFLD.setPersistentField(ClassHelper.getClass(classname), fieldName);
  +							PersistentField pf = PersistentFieldFactory.createPersistentField(m_CurrentCLD.getPersistentFieldClassName(),ClassHelper.getClass(classname),fieldName);
  +                            m_CurrentFLD.setPersistentField(pf);
                           }
   
                           String columnName = atts.getValue(tags.getTagById(COLUMN_NAME));
  @@ -485,7 +493,8 @@
                           else
                           {
                               ord = new ObjectReferenceDescriptor(m_CurrentCLD);
  -                            ord.setPersistentField(m_CurrentCLD.getClassOfObject(), name);
  +                            PersistentField pf = PersistentFieldFactory.createPersistentField(m_CurrentCLD.getPersistentFieldClassName(),m_CurrentCLD.getClassOfObject(),name);
  +                            ord.setPersistentField(pf);
                           }
                           m_CurrentORD = ord;
   
  @@ -590,7 +599,8 @@
                           // set name attribute
                           name = atts.getValue(tags.getTagById(FIELD_NAME));
                           if (isDebug) logger.debug("     " + tags.getTagById(FIELD_NAME) + ": " + name);
  -                        m_CurrentCOD.setPersistentField(m_CurrentCLD.getClassOfObject(), name);
  +						PersistentField pf = PersistentFieldFactory.createPersistentField(m_CurrentCLD.getPersistentFieldClassName(),m_CurrentCLD.getClassOfObject(),name);
  +                        m_CurrentCOD.setPersistentField(pf);
   
                           // set collection-class attribute
                           String collectionClassName = atts.getValue(tags.getTagById(COLLECTION_CLASS));
  
  
  
  1.10      +18 -12    db-ojb/src/java/org/apache/ojb/broker/metadata/fieldaccess/PersistentFieldFactory.java
  
  Index: PersistentFieldFactory.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/fieldaccess/PersistentFieldFactory.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PersistentFieldFactory.java	11 Mar 2004 18:16:12 -0000	1.9
  +++ PersistentFieldFactory.java	15 Mar 2004 00:32:20 -0000	1.10
  @@ -34,26 +34,32 @@
       private static final Class DEFAULT_PERSISTENT_FIELD_IMPL = PersistentFieldDirectAccessImpl.class;
       private static final Class[] METHOD_PARAMETER_TYPES = {Class.class, String.class};
   
  -    private static Class persistentFieldClass = null;
       private static boolean usesAccessorsAndMutators = false;
       private static boolean usesAccessorsAndMutatorsCheck = false;
   
       /**
        * @throws MetadataException if an erros occours when creating the PersistenteField
        */
  -    public static PersistentField createPersistentField(Class attributeType, String attributeName)
  +	public static PersistentField createPersistentField(Class attributeType, String attributeName)
  +	{
  +		return createPersistentField(null,attributeType,attributeName);
  +	}
  +    
  +    public static PersistentField createPersistentField(String persistentFieldClassName, Class attributeType, String attributeName)
       {
           try
           {
  -            if (persistentFieldClass == null)
  +            if (persistentFieldClassName == null)
               {
                   synchronized (PersistentFieldFactory.class)
                   {
  -                    persistentFieldClass = getPersistentFieldClass();
  +                    persistentFieldClassName = getDefaultPersistentFieldClassName();
                   }
               }
               Object[] args = {attributeType, attributeName};
  -            return (PersistentField) ClassHelper.newInstance(persistentFieldClass, METHOD_PARAMETER_TYPES, args);
  +            PersistentField pf = (PersistentField) ClassHelper.newInstance(persistentFieldClassName, METHOD_PARAMETER_TYPES, args);
  +            return pf;
  +            
           }
           catch (Exception ex)
           {
  @@ -69,17 +75,17 @@
               retval = usesAccessorsAndMutators;
           else
           {
  -            Class clazz = getPersistentFieldClass();
  +            String className = getDefaultPersistentFieldClassName();
               PersistentField field = null;
               try
               {
  -                field = (PersistentField) ClassHelper.newInstance(clazz);
  +                field = (PersistentField) ClassHelper.newInstance(className);
                   usesAccessorsAndMutators = field.usesAccessorsAndMutators();
                   retval = usesAccessorsAndMutators;
               }
               catch (Exception e)
               {
  -                log.error("Cannot verify 'usesAccessorsAndMutators' attribute for class " + clazz, e);
  +                log.error("Cannot verify 'usesAccessorsAndMutators' attribute for class " + className, e);
               }
               finally
               {
  @@ -89,7 +95,7 @@
           return retval;
       }
   
  -    private static Class getPersistentFieldClass()
  +    private static String getDefaultPersistentFieldClassName()
       {
           try
           {
  @@ -98,12 +104,12 @@
                               null);
   
               Class clazz = config.getPersistentFieldClass();
  -            return clazz;
  +            return clazz.getName();
           }
           catch (ConfigurationException e)
           {
               log.error("Cannot look-up PersistentField class, use default implementation instead", e);
  -            return DEFAULT_PERSISTENT_FIELD_IMPL;
  +            return DEFAULT_PERSISTENT_FIELD_IMPL.getName();
           }
       }
   
  
  
  
  1.4       +5 -2      db-ojb/src/test/org/apache/ojb/broker/metadata/RuntimeConfigurationTest.java
  
  Index: RuntimeConfigurationTest.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/metadata/RuntimeConfigurationTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RuntimeConfigurationTest.java	14 Aug 2003 18:42:40 -0000	1.3
  +++ RuntimeConfigurationTest.java	15 Mar 2004 00:32:20 -0000	1.4
  @@ -4,6 +4,8 @@
   import org.apache.ojb.broker.PersistenceBroker;
   import org.apache.ojb.broker.PersistenceBrokerFactory;
   import org.apache.ojb.broker.ObjectRepository;
  +import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
  +import org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldFactory;
   
   /**
    * Test used to check if it is possible to start OJB
  @@ -48,7 +50,8 @@
           ClassDescriptor cld = new ClassDescriptor(dr);
           cld.setClassOfObject(ObjectRepository.A.class);
           FieldDescriptor fd = new FieldDescriptor(cld, 1);
  -        fd.setPersistentField(ObjectRepository.A.class, "someAField");
  +        PersistentField pf = PersistentFieldFactory.createPersistentField(ObjectRepository.A.class, "someAField");
  +        fd.setPersistentField(pf);
           cld.addFieldDescriptor(fd);
   
           dr.setClassDescriptor(cld);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org