Spring Users Unite!

View: New views
4 Messages — Rating Filter:   Alert me  

Spring Users Unite!

by tch :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I've noticed on the list some people here - Gaurav Malhotra, etc. had
a goal of using EclipseLink with Spring. How is this going for
everyone? I was previously using Eclipselink in an RCP/OSGi
environment but recently switched over to Spring (Web MVC) and am
probably going through some of  the same growing pains:

Things I'm interested in:

-Your Generic DAO
-Generic annotation based CRUD controller?
-DisplayTag's PaginatedList implementation?

Anyone up for some code share here? I started implementing
PaginatedList but ran into some problems due to the lack of a way to
programatically set an order by clause via a property name. I have
some ideas, but would rather not re-invent the wheel...

./tch
_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: Spring Users Unite!

by Gaurav Malhotra :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Here is the GenericDAO

Note:- CrudService is simple..just inject the below GenericDAO
          Difficult to share the pagination framework. But spring and eclipselink make the things easier.

         Suggestion:- Think of abstracting Search/SortCriteria/PageInput(since of pagination) offcourse Pageoutput and use PageIterator design pattern

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.Query;

import org.eclipse.persistence.internal.jpa.EntityManagerImpl;
import org.eclipse.persistence.queries.ReadAllQuery;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.sessions.Session;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import org.springframework.util.Assert;

import com.oracle.healthinsurance.model.entity.Persistable; // all entities extends the interface persistable

public class GenericDAOJPAImpl<T extends Persistable> extends JpaDaoSupport
                implements GenericDAO<T> {
       
       
        public void create(final T t) {
                Object retVal=  getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(EntityManager em)
                                        throws PersistenceException {
                                em.persist(t);
                                return null;
                        }
                });
        }
       
        @SuppressWarnings("unchecked")
        public T update(final T t) {
                //return getJpaTemplate().merge(t);
                T retVal=  (T) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(final EntityManager em)
                                        throws PersistenceException {
                                T updatedValue = em.merge(t);
                                return updatedValue;
                        }
                });
               
                return retVal;
        }
       

        @SuppressWarnings("unchecked")
        public void delete(Class clas, Serializable id) {
                getJpaTemplate().remove(get(clas, id));
        }

        public void delete(T t) {
                getJpaTemplate().remove(t);
        }

        /**
         * Find in memory object
         *
         * @param T
         *            to be searched object
         */
        @SuppressWarnings("unchecked")
        public List<T> findByExample(final T exampleObject) {
                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(EntityManager em)
                                        throws PersistenceException {
                                final ReadAllQuery query = new ReadAllQuery(exampleObject.getClass());
                                query.useCollectionClass(LinkedList.class);
                                query.setExampleObject(exampleObject);
                                EntityManagerImpl emimpl =  (EntityManagerImpl) em.getDelegate();
                                Session session = emimpl.getActiveSession();
                                List<T> results = (List<T>) session.executeQuery(query);
                               
                                return results;
                        }
                });

                return list;
        }
       
        @SuppressWarnings("unchecked")
        public List<T> findByExample(final ReadAllQuery query) {
                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(EntityManager em)
                                        throws PersistenceException {
                                EntityManagerImpl emimpl =  (EntityManagerImpl) em.getDelegate();
                                Session session = emimpl.getActiveSession();
                                List<T> results = (List<T>) session.executeQuery(query);
                               
                                return results;
                        }
                });

                return list;
        }


        @SuppressWarnings( { "unchecked", "hiding" })
        public <T> List<T> selectAll(final Class<T> clazz, String orderClause) {
                Assert.notNull(orderClause);

                if (orderClause.contains(",")) {
                        orderClause = orderClause.replaceAll("\\s", "");
                        String[] orderbys = orderClause.split(",");
                        orderClause = "";
                        for (int i = 0; i < orderbys.length; i++) {
                                orderClause += "em." + orderbys[i];
                                if (i < orderbys.length - 1)
                                        orderClause += ", ";
                        }
                } else if (orderClause.trim().length() > 0) {
                        orderClause = "em." + orderClause;
                }

                final String ordClause = orderClause;
                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(final EntityManager em)
                                        throws javax.persistence.PersistenceException {
                                StringBuilder queryStr = new StringBuilder();
                                queryStr.append("SELECT em FROM ");
                                queryStr.append(clazz.getSimpleName());
                                queryStr.append(" em ");
                                if (ordClause.length() > 0) {
                                        queryStr.append(" em ORDER BY ");
                                }
                               
                                logger.debug(queryStr.toString());
                               
                                final Query query = em.createQuery(queryStr.toString());
                                return query.getResultList();
                        }
                });

                return list;
        }

        @SuppressWarnings( { "hiding", "unchecked" })
        public <T> T findFresh(final Class<T> entityClass, final Object primaryKey) {
                T retVal = (T) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(final EntityManager em)
                                        throws javax.persistence.PersistenceException {
                                T result = em.find(entityClass, primaryKey);
                               
                                if (result == null) {
                                        return null;
                                }
                                em.refresh(result);

                                return result;
                        }
                });

                return retVal;
        }

        // Revisit this method. Do not test it.
        // <TODO>
        @SuppressWarnings({ "hiding", "unchecked" })
        public <T> List<T> getNamedQuery(final Class<T> entityClass, final String namedQuery,
                        final Object... binds) {
                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(final EntityManager em)
                                        throws javax.persistence.PersistenceException {
                                Query query = em.createNamedQuery(namedQuery);
                               
                                for (int i = 0; i < binds.length; i++) {
                                        Object temp = binds[i];
                                        query.setParameter(i+1, temp);
                                }
                               
                                return query.getResultList();
                        }
                });
               
                return list;
        }

        @SuppressWarnings({ "hiding", "unchecked" })
        public <T> List<T> getNamedQuery(final Class<T> entityClass, final String namedQuery,
                        final Map<String,Object> binds) {
                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(final EntityManager em)
                                        throws PersistenceException {
                                Query query = em.createNamedQuery(namedQuery);
                                Set<String> bindKeys = binds.keySet();
                                for (String key : bindKeys) {
                                        Object val = binds.get(key);
                                        query.setParameter(key, val);
                                }
                               
                                return query.getResultList();
                        }
                });
               
                return list;
        }

        @SuppressWarnings({ "hiding", "unchecked" })
        public <T> List<T> getNamedQuery(final Class<T> entityClass, final String namedQuery,
                        final Map<String,Object> binds, final Map<String, Object> hints) {
                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(final EntityManager em)
                                        throws PersistenceException {
                                Query query = em.createNamedQuery(namedQuery);
                                Set<String> bindKeys = binds.keySet();
                                for (String key : bindKeys) {
                                        Object val = binds.get(key);
                                        query.setParameter(key, val);
                                }
                                Set<String> hintKeys = hints.keySet();
                                for (String key : hintKeys) {
                                        Object val = hints.get(key);
                                        query.setHint(key, val);
                                }
                               
                                return query.getResultList();
                        }
                });
               
                return list;
        }

       
        @SuppressWarnings("unchecked")
        public T get(Class clas, Serializable id) {
                return (T) getJpaTemplate().find(clas, id);
        }

        @SuppressWarnings({ "hiding", "unchecked" })
        public <T> List<T> search(final ReadAllQuery readAllQuery) {
                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
                        public Object doInJpa(EntityManager em)
                                        throws PersistenceException {
                                EntityManagerImpl emimpl =  (EntityManagerImpl) em.getDelegate();
                                Session session = emimpl.getActiveSession();
                                List<T> results = (List<T>) session.executeQuery(readAllQuery);
                               
                                return results;
                        }
                });
                return list;
        }
}
Tim Hollosy wrote:
I've noticed on the list some people here - Gaurav Malhotra, etc. had
a goal of using EclipseLink with Spring. How is this going for
everyone? I was previously using Eclipselink in an RCP/OSGi
environment but recently switched over to Spring (Web MVC) and am
probably going through some of  the same growing pains:

Things I'm interested in:

-Your Generic DAO
-Generic annotation based CRUD controller?
-DisplayTag's PaginatedList implementation?

Anyone up for some code share here? I started implementing
PaginatedList but ran into some problems due to the lack of a way to
programatically set an order by clause via a property name. I have
some ideas, but would rather not re-invent the wheel...

./tch
_______________________________________________
eclipselink-users mailing list
eclipselink-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: Spring Users Unite!

by tch :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks Guarav,
Neat selectAll with the multi order by, I didn't think of doing that :)

As for the pagination, I was hoping someone had already implemented
the interface required by the popular Display Tag lib -
http://displaytag.sourceforge.net/11/

I'll have to implement it myself soon and will share when done.

./tch



On Wed, Oct 15, 2008 at 3:57 AM, Gaurav Malhotra
<gaurav.malhotra@...> wrote:

>
> Here is the GenericDAO
>
> Note:- CrudService is simple..just inject the below GenericDAO
>          Difficult to share the pagination framework. But spring and
> eclipselink make the things easier.
>
>         Suggestion:- Think of abstracting
> Search/SortCriteria/PageInput(since of pagination) offcourse Pageoutput and
> use PageIterator design pattern
>
> import java.io.Serializable;
> import java.util.LinkedList;
> import java.util.List;
> import java.util.Map;
> import java.util.Set;
>
> import javax.persistence.EntityManager;
> import javax.persistence.PersistenceException;
> import javax.persistence.Query;
>
> import org.eclipse.persistence.internal.jpa.EntityManagerImpl;
> import org.eclipse.persistence.queries.ReadAllQuery;
> import org.eclipse.persistence.queries.ReadObjectQuery;
> import org.eclipse.persistence.sessions.Session;
> import org.springframework.orm.jpa.JpaCallback;
> import org.springframework.orm.jpa.support.JpaDaoSupport;
> import org.springframework.util.Assert;
>
> import com.oracle.healthinsurance.model.entity.Persistable; // all entities
> extends the interface persistable
>
> public class GenericDAOJPAImpl<T extends Persistable> extends JpaDaoSupport
>                implements GenericDAO<T> {
>
>
>        public void create(final T t) {
>                Object retVal=  getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(EntityManager em)
>                                        throws PersistenceException {
>                                em.persist(t);
>                                return null;
>                        }
>                });
>        }
>
>        @SuppressWarnings("unchecked")
>        public T update(final T t) {
>                //return getJpaTemplate().merge(t);
>                T retVal=  (T) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(final EntityManager em)
>                                        throws PersistenceException {
>                                T updatedValue = em.merge(t);
>                                return updatedValue;
>                        }
>                });
>
>                return retVal;
>        }
>
>
>        @SuppressWarnings("unchecked")
>        public void delete(Class clas, Serializable id) {
>                getJpaTemplate().remove(get(clas, id));
>        }
>
>        public void delete(T t) {
>                getJpaTemplate().remove(t);
>        }
>
>        /**
>         * Find in memory object
>         *
>         * @param T
>         *            to be searched object
>         */
>        @SuppressWarnings("unchecked")
>        public List<T> findByExample(final T exampleObject) {
>                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(EntityManager em)
>                                        throws PersistenceException {
>                                final ReadAllQuery query = new ReadAllQuery(exampleObject.getClass());
>                                query.useCollectionClass(LinkedList.class);
>                                query.setExampleObject(exampleObject);
>                                EntityManagerImpl emimpl =  (EntityManagerImpl) em.getDelegate();
>                                Session session = emimpl.getActiveSession();
>                                List<T> results = (List<T>) session.executeQuery(query);
>
>                                return results;
>                        }
>                });
>
>                return list;
>        }
>
>        @SuppressWarnings("unchecked")
>        public List<T> findByExample(final ReadAllQuery query) {
>                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(EntityManager em)
>                                        throws PersistenceException {
>                                EntityManagerImpl emimpl =  (EntityManagerImpl) em.getDelegate();
>                                Session session = emimpl.getActiveSession();
>                                List<T> results = (List<T>) session.executeQuery(query);
>
>                                return results;
>                        }
>                });
>
>                return list;
>        }
>
>
>        @SuppressWarnings( { "unchecked", "hiding" })
>        public <T> List<T> selectAll(final Class<T> clazz, String orderClause) {
>                Assert.notNull(orderClause);
>
>                if (orderClause.contains(",")) {
>                        orderClause = orderClause.replaceAll("\\s", "");
>                        String[] orderbys = orderClause.split(",");
>                        orderClause = "";
>                        for (int i = 0; i < orderbys.length; i++) {
>                                orderClause += "em." + orderbys[i];
>                                if (i < orderbys.length - 1)
>                                        orderClause += ", ";
>                        }
>                } else if (orderClause.trim().length() > 0) {
>                        orderClause = "em." + orderClause;
>                }
>
>                final String ordClause = orderClause;
>                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(final EntityManager em)
>                                        throws javax.persistence.PersistenceException {
>                                StringBuilder queryStr = new StringBuilder();
>                                queryStr.append("SELECT em FROM ");
>                                queryStr.append(clazz.getSimpleName());
>                                queryStr.append(" em ");
>                                if (ordClause.length() > 0) {
>                                        queryStr.append(" em ORDER BY ");
>                                }
>
>                                logger.debug(queryStr.toString());
>
>                                final Query query = em.createQuery(queryStr.toString());
>                                return query.getResultList();
>                        }
>                });
>
>                return list;
>        }
>
>        @SuppressWarnings( { "hiding", "unchecked" })
>        public <T> T findFresh(final Class<T> entityClass, final Object primaryKey)
> {
>                T retVal = (T) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(final EntityManager em)
>                                        throws javax.persistence.PersistenceException {
>                                T result = em.find(entityClass, primaryKey);
>
>                                if (result == null) {
>                                        return null;
>                                }
>                                em.refresh(result);
>
>                                return result;
>                        }
>                });
>
>                return retVal;
>        }
>
>        // Revisit this method. Do not test it.
>        // <TODO>
>        @SuppressWarnings({ "hiding", "unchecked" })
>        public <T> List<T> getNamedQuery(final Class<T> entityClass, final String
> namedQuery,
>                        final Object... binds) {
>                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(final EntityManager em)
>                                        throws javax.persistence.PersistenceException {
>                                Query query = em.createNamedQuery(namedQuery);
>
>                                for (int i = 0; i < binds.length; i++) {
>                                        Object temp = binds[i];
>                                        query.setParameter(i+1, temp);
>                                }
>
>                                return query.getResultList();
>                        }
>                });
>
>                return list;
>        }
>
>        @SuppressWarnings({ "hiding", "unchecked" })
>        public <T> List<T> getNamedQuery(final Class<T> entityClass, final String
> namedQuery,
>                        final Map<String,Object> binds) {
>                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(final EntityManager em)
>                                        throws PersistenceException {
>                                Query query = em.createNamedQuery(namedQuery);
>                                Set<String> bindKeys = binds.keySet();
>                                for (String key : bindKeys) {
>                                        Object val = binds.get(key);
>                                        query.setParameter(key, val);
>                                }
>
>                                return query.getResultList();
>                        }
>                });
>
>                return list;
>        }
>
>        @SuppressWarnings({ "hiding", "unchecked" })
>        public <T> List<T> getNamedQuery(final Class<T> entityClass, final String
> namedQuery,
>                        final Map<String,Object> binds, final Map<String, Object> hints) {
>                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(final EntityManager em)
>                                        throws PersistenceException {
>                                Query query = em.createNamedQuery(namedQuery);
>                                Set<String> bindKeys = binds.keySet();
>                                for (String key : bindKeys) {
>                                        Object val = binds.get(key);
>                                        query.setParameter(key, val);
>                                }
>                                Set<String> hintKeys = hints.keySet();
>                                for (String key : hintKeys) {
>                                        Object val = hints.get(key);
>                                        query.setHint(key, val);
>                                }
>
>                                return query.getResultList();
>                        }
>                });
>
>                return list;
>        }
>
>
>        @SuppressWarnings("unchecked")
>        public T get(Class clas, Serializable id) {
>                return (T) getJpaTemplate().find(clas, id);
>        }
>
>        @SuppressWarnings({ "hiding", "unchecked" })
>        public <T> List<T> search(final ReadAllQuery readAllQuery) {
>                List<T> list = (List<T>) getJpaTemplate().execute(new JpaCallback() {
>                        public Object doInJpa(EntityManager em)
>                                        throws PersistenceException {
>                                EntityManagerImpl emimpl =  (EntityManagerImpl) em.getDelegate();
>                                Session session = emimpl.getActiveSession();
>                                List<T> results = (List<T>) session.executeQuery(readAllQuery);
>
>                                return results;
>                        }
>                });
>                return list;
>        }
> }
>
> Tim Hollosy wrote:
>>
>> I've noticed on the list some people here - Gaurav Malhotra, etc. had
>> a goal of using EclipseLink with Spring. How is this going for
>> everyone? I was previously using Eclipselink in an RCP/OSGi
>> environment but recently switched over to Spring (Web MVC) and am
>> probably going through some of  the same growing pains:
>>
>> Things I'm interested in:
>>
>> -Your Generic DAO
>> -Generic annotation based CRUD controller?
>> -DisplayTag's PaginatedList implementation?
>>
>> Anyone up for some code share here? I started implementing
>> PaginatedList but ran into some problems due to the lack of a way to
>> programatically set an order by clause via a property name. I have
>> some ideas, but would rather not re-invent the wheel...
>>
>> ./tch
>> _______________________________________________
>> eclipselink-users mailing list
>> eclipselink-users@...
>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Spring-Users-Unite%21-tp19919618p19988656.html
> Sent from the EclipseLink - Users mailing list archive at Nabble.com.
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@...
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: Spring Users Unite!

by gsilverman :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I just posted a thread to this group regarding Spring, JUnit4 and EclipseLink JPA. Perhaps you might have more insight into this than I. See http://www.nabble.com/Weaving-in-Spring-problem-td20003299.html


Tim Hollosy wrote:
I've noticed on the list some people here - Gaurav Malhotra, etc. had
a goal of using EclipseLink with Spring. How is this going for
everyone? I was previously using Eclipselink in an RCP/OSGi
environment but recently switched over to Spring (Web MVC) and am
probably going through some of  the same growing pains:

Things I'm interested in:

-Your Generic DAO
-Generic annotation based CRUD controller?
-DisplayTag's PaginatedList implementation?

Anyone up for some code share here? I started implementing
PaginatedList but ran into some problems due to the lack of a way to
programatically set an order by clause via a property name. I have
some ideas, but would rather not re-invent the wheel...

./tch
_______________________________________________
eclipselink-users mailing list
eclipselink-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/eclipselink-users