Hey.... It works. How much do you trust the code of a guy who can't figure out
how to post on a message board? lol
Anyway, I set this up so we could have a class with standard persistence
mechanisms that could be used with different persistent managers. I also like
the templating mechanisms.
| public interface PersistenceManager
| {
| List findByNamedQuery(String queryName, Map<String, Serializable>
queryParams);
|
| EntityManager getEntityManager();
|
| <T> void insert( T transientInstance );
|
| <T> void remove( T persistentInstance );
|
| <T> T update( T detachedInstance );
|
| <T> T findById( Class<T> transientInstance, Serializable id );
|
| <T> List<T> findAll( Class<T> transientInstance );
| }
|
|
| ------------------------------------------------- Abstract Implementation
-----------
|
| public abstract class AbstractPersistenceManagerImpl
| implements PersistenceManager
| {
| private static final Log log =
LogFactory.getLog(PersistenceManager.class);
|
| public <T> void insert(T transientInstance)
| {
| log.debug("persisting " +
transientInstance.getClass().getName() + " instance");
| try
| {
| getEntityManager().persist(transientInstance);
| log.debug("persist successful");
| }
| catch (RuntimeException re)
| {
| throw new TessRuntimeException(re);
| }
| }
|
| public <T> void remove(T persistentInstance)
| {
| log.debug("removing " + persistentInstance.getClass().getName()
+ " instance");
| try
| {
| getEntityManager().remove(persistentInstance);
| log.debug("remove successful");
| }
| catch (RuntimeException re)
| {
| throw new TessRuntimeException(re);
| }
| }
|
| public <T> T update(T detachedInstance)
| {
| log.debug("merging " + detachedInstance.getClass().getName() +
" instance");
| try
| {
| T result = getEntityManager().merge(detachedInstance);
| log.debug("merge successful");
| return result;
| }
| catch (RuntimeException re)
| {
| throw new TessRuntimeException(re);
| }
| }
|
| public List findByNamedQuery(String queryName, Map<String,
Serializable> queryParams)
| {
| log.debug("running named query " + queryName);
| try
| {
| Query query =
getEntityManager().createNamedQuery(queryName);
| if (queryParams != null)
| {
| for (String paramName : queryParams.keySet())
| query.setParameter(paramName,
queryParams.get(paramName));
| }
| List result = query.getResultList();
| log.debug("merge successful");
| return result;
| }
| catch (RuntimeException re)
| {
| throw new TessRuntimeException(re);
| }
| }
|
| public <T> T findById(Class<T> transientInstance, Serializable id)
| {
| try
| {
| log.debug("getting " +
transientInstance.getClass().getName() + " instance with id: " + id);
| T instance = getEntityManager().find(transientInstance,
id);
| log.debug("get successful");
| return instance;
| }
| catch (RuntimeException re)
| {
| throw new TessRuntimeException(re);
| }
| }
|
| public <T> List<T> findAll(Class<T> transientInstance)
| {
| try
| {
| log.debug("getting all records for " +
transientInstance.getClass().getName());
| List<T> instance = getEntityManager().createQuery(
|
"from " +
transientInstance.getSimpleName()
|
+ " as
instance").getResultList();
| log.debug("get successful");
| return instance;
| }
| catch (RuntimeException re)
| {
| throw new TessRuntimeException(re);
| }
| }
|
| public abstract EntityManager getEntityManager();
| }
|
| ------------------------------------ Implementing persistence manager
----------------------------
|
| @Stateless
| @Local ({PersistenceManager.class})
| public class SecurityPersistenceManagerImpl
| extends AbstractPersistenceManagerImpl
| implements PersistenceManager
| {
| @PersistenceContext(unitName="securitymanager")
| EntityManager entityManager;
|
| @Override
| public EntityManager getEntityManager()
| {
| return entityManager;
| }
| }
|
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3928630#3928630
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3928630
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user