Hi John,

there is a posibility to dispose a configuration loaded with
JDOManager.loadConfiguration(...) before you have called
JDOManager.createInstance(...) by calling DatabaseRegistry.clear().
After you once called JDOManager.createInstance(...) there is no way to
dispose a JDOManager instance yet.

Having said that we recognized that bad behaviour and want to improve
life cycle management with jira issue CASTOR-1201.

Regards
Ralf
Castor JDO, committer


John Greene schrieb:
> Werner,
> 
> Appreciate your help.
> 
> Is it possible to dispose of the JDOManager.loadConfiguration() once it has
> been loaded?
> 
> 
> John.
> 
> -----Original Message-----
> From: Werner Guttmann [mailto:[EMAIL PROTECTED]
> Sent: Sunday, January 29, 2006 06:31 AM
> To: [email protected]
> Subject: Re: [castor-user] How to implement castor?
> 
> 
> John,
> 
> I think whilst your approach is very good and clean one, there's a
> couple of things to note.
> 
> JDOManager.loadConfiguration() is a static method, and should be called
> once only to load a configuration with Castor JDO. A call to
> loadConfiguration() will instruct Castor JDO to take a JDO configuration
> file and load it, hence making all the information provided in that file
> available to Castor JDO for further use.
> 
> JDOManager.createInstance() will create a JDOManager instance for a
> given database (as specified through the parameter passed to the call).
> There's no need to create this object instance more than once, as it is
> quite an expensive operation as well, and hence should not be performed
> on every method call of your DAO.
> 
> In other words, consider moving the calls to
> JDOManager.loadConfiguration() and JDOManager.createInstance() to e.g.
> the constructor of your DAO (at the minimum).
> 
> Once you've obtained your JDOManager instance through a call to
> JDOManager.createInstance(), use this JDOManager instance to create
> Database instances as you need them, use them, and discard them as well.
> 
> Following your example below, let me explain what I actually mean. Let's
> add a load method to your DAO (one I am actually missing, as you won't
> for example be able to delete an object without loading it previously).
> 
> public void load(Object identity) {
>    try {
>       Database db = _jdo.getDatabase();
>       db.begin();
>       db.load (SomeClass.class, identity);
>       db.commit();
>    }
>    catch (PersistenceException e) {
>       db.rollback();
>       // some other error handling, such as e.g. logging
>    }
>    finally {
>       db.close();
>    }
> }
> 
> In the above load() method, the assumption is that your DAO has an
> instance variable _jdo of type JDOManager (which has been assigned the
> JDOManager instance as returned by JDOManager.createInstance()). We
> first call getDatabase() to obtain a Database instance, then deal with
> transaction demarcation and finally go about eventually loading the
> object in question, as specified by the identity object passed to the
> load method.
> 
> Please have a close look at the exception handling, incl. the calls to
> Database.rollback() in the catch clause and Database.close() in the
> finally clause. These two calls are very important as they are required
> to guarantee data consistency (through properly committing/rolling back
> your units of work) and resource cleanup.
> 
> I hope that gets you a bit further, and don't hesitate to ask any
> further questions related to what has just been said.
> 
> Werner
> 
> John Greene wrote:
> 
>>Hi Werner,
>>
>>First thanks for the indications. I was googling the Internet since last
>>night and saw many different implementations of Castor that got me really
>>confused.
>>
>>Okay.... I have created the following DAO class:
>>
>>public class CastorDAO {
>>
>>    private static String _databaseName = "mydb";
>>    private static String _databaseConfiguration = "jdo-config.xml";
>>    protected static Database _db;
>>
>>    /** Creates a new instance of CastorDAO */
>>    public CastorDAO() {
>>
>>    }
>>
>>    public void loadDatabase() {
>>        try {
>>            JDOManager.loadConfiguration( _databaseConfiguration);
>>        } catch (MappingException e) {
>>            System.out.println(e);
>>        }
>>    }
>>
>>    public void open() {
>>        try {
>>            _db = JDOManager.createInstance(_databaseName).getDatabase();
>>        } catch (PersistenceException e) {
>>            System.out.println(e);
>>        } catch (MappingException e) {
>>            System.out.println(e);
>>        }
>>    }
>>
>>    public void create( Object object ) {
>>        try {
>>            _db.begin();
>>            _db.create( object );
>>            _db.commit();
>>        } catch (PersistenceException e) {
>>            System.out.println(e);
>>        }
>>    }
>>
>>    public void remove( Object object ) {
>>        try {
>>            _db.begin();
>>            _db.remove( object );
>>            _db.commit();
>>        } catch (PersistenceException e) {
>>            System.out.println(e);
>>        }
>>    }
>>
>>    public void update( Object object ) {
>>        try {
>>            _db.begin();
>>            _db.update( object );
>>            _db.commit();
>>        } catch (PersistenceException e) {
>>            System.out.println(e);
>>        }
>>    }
>>}
>>
>>To implement adding a NEW STUDENT I would do....
>>
>>      CastorDAO dao = new CastorDAO();
>>      dao.loadConfiguration;
>>      dao.create(student);
>>
>>
>>Question:
>>      dao.loadConfiguration; ----loads the configuration file,
>>
>>there is a method to close a database instance connection, however is
> 
> there
> 
>>a method to unload/close the database or test for presence; otherwise I'll
>>get a runtime Warning message indicating that the database has already
> 
> been
> 
>>loaded?
>>
>>Thanks
>>John.
>>
>>
>>-----Original Message-----
>>From: Werner Guttmann [mailto:[EMAIL PROTECTED]
>>Sent: Saturday, January 28, 2006 06:04 PM
>>To: [email protected]
>>Subject: Re: [castor-user] How to implement castor?
>>
>>
>>John,
>>
>>please see in line ....
>>
>>John Greene wrote:
>>
>>
>>>I am unclear about how to go about implementing persistence using castor
>>
>>in
>>
>>
>>>my project. I have created my jdo-config.xml and mapping.xml files, made a
>>
>>t
>>
>>
>>>est connection and everything works just fine.
>>>
>>>But now I want to implement for a project having many classes that need
>>
>>pers
>>
>>
>>>istence and I am a bit confused as how to go about it.
>>>
>>>Here is an example......:
>>>
>>>I have a Java object called "Student" that is mapped to an MySQL database.
>>>
>>>public class Student {
>>>
>>>   private int _studentID;
>>>   private String _firstName;
>>>   private String _lastName;
>>>   private String _groups;
>>>
>>>
>>>   /** Creates a new instance of Student */
>>>   public Student() {
>>>       setStudentID(0);
>>>       setFirstName("");
>>>       setLastName("");
>>>       setGroups("");
>>>   }
>>>
>>>   public Student( int studentID, String firstName, String lastName,
>>
>>String
>>
>>
>>>group ) {
>>>       setStudentID(studentID);
>>>       setFirstName(firstName);
>>>       setLastName(lastName);
>>>       setGroups(group);
>>>   }
>>>
>>>   public int getStudentID() {
>>>       return _studentID;
>>>   }
>>>
>>>   public void setStudentID(int studentID) {
>>>       this._studentID = studentID;
>>>   }
>>>
>>>   public String getFirstName() {
>>>       return _firstName;
>>>   }
>>>
>>>   public void setFirstName(String firstName) {
>>>       this._firstName = firstName;
>>>   }
>>>
>>>   public String getLastName() {
>>>       return _lastName;
>>>   }
>>>
>>>   public void setLastName(String lastName) {
>>>       this._lastName = lastName;
>>>   }
>>>
>>>   public String getGroups() {
>>>       return _groups;
>>>   }
>>>
>>>   public void setGroups(String groups) {
>>>       this._groups = groups;
>>>   }
>>>}
>>>
>>>1st Problem:
>>>
>>>Should this class implement the Persistence class?  ...for example:
>>>
>>>      public class Student implements Persistence {
>>>
>>
>>Not necessarily,
>>Not necessarily, unless you need the functionality the Persistence
>>interface offers, like the callback functions. If not, there's no need
>>to implement any interfaces to be able to persist your Student class
>>(and others) with Castor JDO.
>>
>>
>>
>>>2nd Problem:
>>>I think that the create, update, remove student methods should be part of
>>
>>th
>>
>>
>>>e Student class.
>>
>>
>>In my view, that's not necessarily a good idea. Personally, I prefer to
>>see my entities (like e.g the Student class) as a POJO, a plain old Java
>>object that simply has a well-defined state at any time (through the
>>property values attached to a Student instance). Given this approach,
>>I'd rather prefer to have a DAO object that offers persistence-related
>>functionality for a particular entity, and hence provides methods for
>>the CRUD operations and more (if required).
>>
>>
>>>Do I therefore need to include code to load the jdo-cong.xml configuration
>>
>>f
>>
>>
>>>ile inside of Student?
>>>
>>>     JDOManager.loadConfiguration("jdo-config.xml");
>>>
>>>I tried this and got a Warning message for each new instance of Student,
>>
>>ind
>>
>>
>>>icating that the database has already been loaded.
>>>
>>>How can I test if the database has been loaded already?
>>>
>>>
>>>3rd Problem
>>>My project has numerous classes, each needing mapping to the MySQL
>>
>>database.
>>
>>
>>>What would be the best way to implement this?
>>
>>
>>Just define mappings for all your classes, carefully think about how to
>>relate those objects to each-other, and use your DAOs to load, update,
>>remove, etc your objects (well, object graphs, to be more precise) with
>>the help of Castor JDO.
>>
>>
>>
>>>Thanks in advance
>>>
>>>
>>>
>>>-------------------------------------------------
>>>If you wish to unsubscribe from this list, please
>>>send an empty message to the following address:
>>>
>>>[EMAIL PROTECTED]
>>>-------------------------------------------------
>>>
>>>
>>
>>
>>
>>-------------------------------------------------
>>If you wish to unsubscribe from this list, please
>>send an empty message to the following address:
>>
>>[EMAIL PROTECTED]
>>-------------------------------------------------
>>
>>
>>
>>
>>-------------------------------------------------
>>If you wish to unsubscribe from this list, please
>>send an empty message to the following address:
>>
>>[EMAIL PROTECTED]
>>-------------------------------------------------
>>
>>
> 
> 
> 
> -------------------------------------------------
> If you wish to unsubscribe from this list, please
> send an empty message to the following address:
> 
> [EMAIL PROTECTED]
> -------------------------------------------------
> 
> 
> 
> 
> -------------------------------------------------
> If you wish to unsubscribe from this list, please 
> send an empty message to the following address:
> 
> [EMAIL PROTECTED]
> -------------------------------------------------

-- 

Syscon Ingenieurbüro für
Meß- und Datentechnik GmbH
Ralf Joachim
Raiffeisenstraße 11
D-72127 Kusterdingen
Germany

Tel.   +49 7071 3690 52
Mobil: +49 173 9630135
Fax    +49 7071 3690 98

Email: [EMAIL PROTECTED]
Web:   www.syscon-world.de

-------------------------------------------------
If you wish to unsubscribe from this list, please 
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to