You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Youness Afid <Ya...@omnidata.co.ma> on 2003/06/30 20:18:29 UTC

[NEWBIE] your advice pleeeeeeease

hi,
sorry for this noisy mail, but can any guru here tell me if my persistence
service is well done ??
thanks a lot in advance



----------------------------------------------------------------------------
----------------------------
package services.persistence;

import java.util.Collection;

import org.apache.ojb.broker.PersistenceBroker;
import org.apache.ojb.broker.PersistenceBrokerFactory;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryByCriteria;

import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;

import services.exception.ExceptionService;

public class PersistenceService implements IPersistenceService {

	private Log log = LogFactory.getLog(PersistenceService.class);

	private PersistenceBroker getBroker() throws Exception {
		PersistenceBroker broker = null;
		try {
			broker =
PersistenceBrokerFactory.defaultPersistenceBroker();
		} catch (Throwable t) {
			log.error(t);
	
ExceptionService.getInstance().throwException(ExceptionService.FATAL,
ExceptionService.OJB_BROKERINSTANCIATION);
		}
		return broker;
	}

	public void storeObject(Object object) throws Exception {
		PersistenceBroker broker = getBroker();
		try {
			broker.beginTransaction();
			broker.store(object);
			broker.commitTransaction();
		} catch (Exception e1) {
			try {
				broker.abortTransaction();
			} catch (Exception e2) {
				log.error(e2);
	
ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
ExceptionService.OJB_TRANSACTION);
			}
			log.error(e1);
	
ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
ExceptionService.OJB_STORE);
		}
	}

	public void deleteObject(Object object) throws Exception {
		PersistenceBroker broker = getBroker();
		try {
			broker.beginTransaction();
			broker.delete(object);
			broker.commitTransaction();
		} catch (Exception e1) {
			try {
				broker.abortTransaction();
			} catch (Exception e2) {
				log.error(e2);
	
ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
ExceptionService.OJB_TRANSACTION);
			}
			log.error(e1);
	
ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
ExceptionService.OJB_STORE);
		}
	}

	public Object getObjectByCriteria(Class clazz, Criteria criteria) {
		Object object = null;
		Query query = new QueryByCriteria(clazz, criteria);
		try {
			object = getBroker().getObjectByQuery(query);
		} catch (Throwable t) {
			log.error(t);
	
ExceptionService.getInstance().addError(ExceptionService.MESSAGENAME,
ExceptionService.OJB_GETCOLLECTION);
		}
		return object;
	}

	public Object getObjectById(Class clazz, int id) {
		Criteria criteria = new Criteria();
		criteria.addEqualTo("id", String.valueOf(id));
		return getObjectByCriteria(clazz, criteria);
	}

	public Collection getCollectionByCriteria(Class clazz, Criteria
criteria) {
		Collection collection = null;
		Query query = new QueryByCriteria(clazz, criteria);
		try {
			collection =
getBroker().getCollectionByQuery(query);
		} catch (Throwable t) {
			log.error(t);
	
ExceptionService.getInstance().addError(ExceptionService.MESSAGENAME,
ExceptionService.OJB_GETCOLLECTION);
		}
		return collection;

	}

}

Re: [NEWBIE] your advice pleeeeeeease

Posted by Thomas Mahler <th...@web.de>.
Hi!

from an OJB standpoint it looks OK.

If you want to use the interface IPersistenceService as an abstraction 
of the concrete persistence layer I have some doubts.

The Methods
public Object getObjectByCriteria(Class clazz, Criteria criteria) and
public Collection getCollectionByCriteria(Class clazz, Criteria criteria)
both have a Criteria parameter. Criteria is part of the OJB query 
package and so your interface contains a dependency on OJB. If you 
choose to work exclusively with OJB this is OK, but if you want to 
plugin different O/R layers you'll have to translate OJB Criteria to the 
query API of the other tool!

The method
public Object getObjectById(Class clazz, int id)
does only accept a single int column and you statically refer to the 
"id" field as PK field.
This is a hard restriction on both object model and relational schema.
Maybe it's OK for your current project, but what will you do if the next 
  project has to use a legacy database with compound primary keys.

just my 2 cent,

cheers,
Thomas


Youness Afid wrote:
> hi,
> sorry for this noisy mail, but can any guru here tell me if my persistence
> service is well done ??
> thanks a lot in advance
> 
> 
> 
> ----------------------------------------------------------------------------
> ----------------------------
> package services.persistence;
> 
> import java.util.Collection;
> 
> import org.apache.ojb.broker.PersistenceBroker;
> import org.apache.ojb.broker.PersistenceBrokerFactory;
> import org.apache.ojb.broker.query.Criteria;
> import org.apache.ojb.broker.query.Query;
> import org.apache.ojb.broker.query.QueryByCriteria;
> 
> import org.apache.commons.logging.LogFactory;
> import org.apache.commons.logging.Log;
> 
> import services.exception.ExceptionService;
> 
> public class PersistenceService implements IPersistenceService {
> 
> 	private Log log = LogFactory.getLog(PersistenceService.class);
> 
> 	private PersistenceBroker getBroker() throws Exception {
> 		PersistenceBroker broker = null;
> 		try {
> 			broker =
> PersistenceBrokerFactory.defaultPersistenceBroker();
> 		} catch (Throwable t) {
> 			log.error(t);
> 	
> ExceptionService.getInstance().throwException(ExceptionService.FATAL,
> ExceptionService.OJB_BROKERINSTANCIATION);
> 		}
> 		return broker;
> 	}
> 
> 	public void storeObject(Object object) throws Exception {
> 		PersistenceBroker broker = getBroker();
> 		try {
> 			broker.beginTransaction();
> 			broker.store(object);
> 			broker.commitTransaction();
> 		} catch (Exception e1) {
> 			try {
> 				broker.abortTransaction();
> 			} catch (Exception e2) {
> 				log.error(e2);
> 	
> ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
> ExceptionService.OJB_TRANSACTION);
> 			}
> 			log.error(e1);
> 	
> ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
> ExceptionService.OJB_STORE);
> 		}
> 	}
> 
> 	public void deleteObject(Object object) throws Exception {
> 		PersistenceBroker broker = getBroker();
> 		try {
> 			broker.beginTransaction();
> 			broker.delete(object);
> 			broker.commitTransaction();
> 		} catch (Exception e1) {
> 			try {
> 				broker.abortTransaction();
> 			} catch (Exception e2) {
> 				log.error(e2);
> 	
> ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
> ExceptionService.OJB_TRANSACTION);
> 			}
> 			log.error(e1);
> 	
> ExceptionService.getInstance().throwException(ExceptionService.MESSAGENAME,
> ExceptionService.OJB_STORE);
> 		}
> 	}
> 
> 	public Object getObjectByCriteria(Class clazz, Criteria criteria) {
> 		Object object = null;
> 		Query query = new QueryByCriteria(clazz, criteria);
> 		try {
> 			object = getBroker().getObjectByQuery(query);
> 		} catch (Throwable t) {
> 			log.error(t);
> 	
> ExceptionService.getInstance().addError(ExceptionService.MESSAGENAME,
> ExceptionService.OJB_GETCOLLECTION);
> 		}
> 		return object;
> 	}
> 
> 	public Object getObjectById(Class clazz, int id) {
> 		Criteria criteria = new Criteria();
> 		criteria.addEqualTo("id", String.valueOf(id));
> 		return getObjectByCriteria(clazz, criteria);
> 	}
> 
> 	public Collection getCollectionByCriteria(Class clazz, Criteria
> criteria) {
> 		Collection collection = null;
> 		Query query = new QueryByCriteria(clazz, criteria);
> 		try {
> 			collection =
> getBroker().getCollectionByQuery(query);
> 		} catch (Throwable t) {
> 			log.error(t);
> 	
> ExceptionService.getInstance().addError(ExceptionService.MESSAGENAME,
> ExceptionService.OJB_GETCOLLECTION);
> 		}
> 		return collection;
> 
> 	}
> 
> }
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
>