001: /**
002: * Copyright (C) 2001-2004 France Telecom R&D
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */package org.objectweb.speedo.mapper.api;
018:
019: import org.objectweb.jorm.api.PClassMapping;
020: import org.objectweb.jorm.api.PException;
021: import org.objectweb.jorm.naming.api.PNamingContext;
022: import org.objectweb.jorm.naming.api.PBinder;
023:
024: /**
025: * It defines a Jorm configurator which manages the PClassMapping, the PBinder
026: * and the PNamingContext for persistent classes.
027: *
028: * @author S.Chassande-Barrioz
029: */
030: public interface JormFactory {
031:
032: /**
033: * Retrieve the Binder managing the persistent class (Not a Generic class).
034: * This method is a shortcut to this call:
035: * getPClassMapping(clazz).getPBinder()
036: *
037: * @param clazz the Jorm class name managed which the PBinder is asked
038: * @return the PBinder instance to use for the given jorm class name
039: */
040: PBinder getPBinder(Class clazz) throws PException;
041:
042: /**
043: * Retrieve the Binder managing the persistent class (Not a Generic class).
044: * This method is a shortcut to this call:
045: * getPClassMapping(Class.forName(classname, cl, true)).getPBinder()
046: *
047: * @param classname is the class name of the jorm class which the
048: * PBinder is required
049: * @param cl is the classloader where to find/load the class
050: * @return the PBinder instance to use for the given jorm class name
051: */
052: PBinder getPBinder(String classname, ClassLoader cl)
053: throws PException;
054:
055: /**
056: * Is a shortcut to the call
057: * getPClassMapping(Class.forName(classname, cl, true))
058: *
059: * @param classname is the class name of the jorm class which the
060: * PClassMapping is required
061: * @param cl is the classloader where to find/load the class
062: * @return the PClassMapping which manages a PersistentObjectItf
063: */
064: PClassMapping getPClassMapping(String classname, ClassLoader cl)
065: throws PException;
066:
067: /**
068: * Retrieves a PClassMapping instance managing a jorm class. If the
069: * PClassMapping does not already exist then it is created, configured and
070: * mapped in the PMapper. The PClassMapping configuration contains the
071: * PBinder assignement, the PNamingContext assignement for each reference,
072: * and the GenClassMapping assignement. The assigned GenClassMapping must
073: * also be configured. In other hand the PClassMapping of referenced class
074: * is not configured now. Only the PNamingContext is needed.
075: * @param clazz is the class of the jorm class which the
076: * PClassMapping is required
077: * @return the PClassMapping which manages the persistent class
078: */
079: PClassMapping getPClassMapping(Class clazz) throws PException;
080:
081: /**
082: * Retrieve the PClassMapping of a gen class since its path
083: * @param path is the path representing the way to access the
084: * GenClassMapping
085: */
086: PClassMapping getGenClassMapping(String path);
087:
088: /**
089: * Is a shortcut to the call
090: * getPNamingContext(Class.forName(classname, cl, true))
091: *
092: * @see #getPNamingContext(Class)
093: * @param classname the Jorm class name managed by the wanted PNamingContext
094: * @return the PNamingContext instance to use for the given jorm class name
095: */
096: PNamingContext getPNamingContext(String classname, ClassLoader cl)
097: throws PException;
098:
099: /**
100: * Retrieve the PNamingcontext managing the persistent class (Not a
101: * Generic class) and its sub classes.
102: *
103: * @param clazz the Jorm class name managed which the PNamingContext is asked
104: * @return the PBinder instance to use for the given jorm class name
105: */
106: PNamingContext getPNamingContext(Class clazz) throws PException;
107:
108: /**
109: * Retrieves the classloader of a class if the class has been already mapped.
110: * Otherwise a null value is returned
111: */
112: ClassLoader getClassLoader(String className);
113:
114: /**
115: * @see org.objectweb.speedo.mapper.api.JormFactoryAttributes
116: */
117: byte getMappingStructureRule();
118:
119: /**
120: * Clean the jorm factory forgetting all application classes loaded previously.
121: */
122: void clean() throws PException;
123:
124: }
|