Refactored service layer to reflect changes in search methods lower down, and moved...
authorben.clark <ben.clark@localhost>
Fri, 18 Dec 2009 10:35:43 +0000 (10:35 +0000)
committerben.clark <ben.clark@localhost>
Fri, 18 Dec 2009 10:35:43 +0000 (10:35 +0000)
27 files changed:
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/AgentServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/AnnotatableServiceBase.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/AnnotationService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/AuditEventService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/CollectionServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/CommonServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/DatabaseServiceHibernateImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/DescriptionServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureTreeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IDescriptionService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IIdentifiableEntityService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IUserService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/LocationServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/MediaServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ReferenceServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ServiceBase.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonTreeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TermServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/UserService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/VersionableServiceBase.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/VocabularyServiceImpl.java

index eda3c799f934eb2c13dbe79e29f367c80af59143..a431a1df294fe7eb8f635aac6363b3c65eaacb0f 100644 (file)
 package eu.etaxonomy.cdm.api.service;\r
 \r
 import java.util.ArrayList;\r
-import java.util.Collection;\r
 import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
@@ -32,7 +30,6 @@ import eu.etaxonomy.cdm.model.agent.Team;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 \r
 \r
@@ -41,7 +38,7 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
  *\r
  */\r
 @Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class AgentServiceImpl extends IdentifiableServiceBase<AgentBase,IAgentDao> implements IAgentService {\r
     private static final Logger logger = Logger.getLogger(AgentServiceImpl.class);\r
        \r
@@ -101,17 +98,6 @@ public class AgentServiceImpl extends IdentifiableServiceBase<AgentBase,IAgentDa
                return new DefaultPagerImpl<Address>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
 \r
-       public Pager<AgentBase> search(Class<? extends AgentBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Integer numberOfResults = dao.count(clazz,queryString);\r
-               \r
-               List<AgentBase> results = new ArrayList<AgentBase>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<AgentBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
-\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.api.service.IAgentService#getPersonUuidAndNomenclaturalTitle()\r
         */\r
index c294197338199de9f48923cbb74345a2a6846fcd..ee52745bc1dcdbe998d72c4f86bfb961a804dffc 100644 (file)
@@ -23,10 +23,9 @@ import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.persistence.dao.common.IAnnotatableDao;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
-@Transactional(readOnly = true)\r
 public abstract class AnnotatableServiceBase<T extends AnnotatableEntity,DAO extends IAnnotatableDao<T>> extends VersionableServiceBase<T, DAO>\r
                implements IAnnotatableService<T> {\r
-       \r
+       @Transactional(readOnly = true)\r
        public Pager<Annotation> getAnnotations(T annotatedObj, MarkerType status, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
                Integer numberOfResults = dao.countAnnotations(annotatedObj, status);\r
                \r
index 7568b62bbe028f476c38a3fff6ac8ad31016d3d1..88dc863a2cf730aa37134c05fd3ae4bd431c105d 100644 (file)
@@ -15,6 +15,7 @@ import java.util.List;
 \r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
@@ -26,7 +27,7 @@ import eu.etaxonomy.cdm.persistence.dao.hibernate.common.AnnotationDaoImpl;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 @Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class AnnotationService extends AnnotatableServiceBase<Annotation, AnnotationDaoImpl> implements\r
                IAnnotationService {\r
 \r
index 02f77a2332ab9c32fc84815ae72563b2d721dc81..6778ef4f69a659896ee366ac7ea205c11ac24a28 100644 (file)
@@ -16,6 +16,7 @@ import java.util.UUID;
 import org.joda.time.DateTime;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
@@ -25,7 +26,7 @@ import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
 import eu.etaxonomy.cdm.persistence.view.IAuditEventDao;\r
 \r
 @Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class AuditEventService implements IAuditEventService {\r
        \r
        IAuditEventDao dao;\r
index 6052d56c8ebe0741a4f9e6aeae60570c5959544c..8d78b514d2f964f0e7a6b37f046536f1b9b5ebfc 100644 (file)
@@ -38,17 +38,6 @@ public class CollectionServiceImpl extends   IdentifiableServiceBase<Collection, I
        public void generateTitleCache() {\r
                logger.warn("Not yet implemented");\r
        }\r
-\r
-       public Pager<Collection> search(Class<? extends Collection> clazz,      String query, Integer pageSize, Integer pageNumber,     List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               Integer numberOfResults = dao.count(clazz,query);\r
-                       \r
-               List<Collection> results = new ArrayList<Collection>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,query, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-                       \r
-               return new DefaultPagerImpl<Collection>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
        \r
        public List<Collection> searchByCode(String code) {\r
                return this.dao.getCollectionByCode(code);\r
index 13c145c23114a4c02c52641b13e738a14e897dae..6a81b381c1c8c1d6b47811b7b6a15dfa99ee6d28 100644 (file)
@@ -20,6 +20,7 @@ import java.util.Set;
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
@@ -43,7 +44,7 @@ import eu.etaxonomy.cdm.strategy.merge.MergeException;
 \r
 \r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class CommonServiceImpl extends ServiceBase<OriginalSourceBase,IOriginalSourceDao> implements ICommonService {\r
        private static final Logger logger = Logger.getLogger(CommonServiceImpl.class);\r
        \r
index ab9621431ab983d9f62df748b6492da0045cd5a0..211eb1365c0d73ff9bf75b98508d29c3d0086a25 100644 (file)
@@ -19,6 +19,7 @@ import org.springframework.context.ApplicationContextAware;
 import org.springframework.jdbc.datasource.AbstractDriverBasedDataSource;\r
 import org.springframework.orm.hibernate3.SessionFactoryUtils;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
@@ -38,7 +39,7 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
  *\r
  */\r
 @Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class DatabaseServiceHibernateImpl  implements IDatabaseService, ApplicationContextAware {\r
        private static final Logger logger = Logger.getLogger(DatabaseServiceHibernateImpl.class);\r
        \r
index 72e4573db71432065e144066dc6ce50ab051b8cd..237e7bd8a37bb3854439334b70903c608bc3c853 100644 (file)
@@ -201,7 +201,7 @@ public class DescriptionServiceImpl extends IdentifiableServiceBase<DescriptionB
         * FIXME Candidate for harmonization\r
         * move: descriptionElementService.search\r
         */\r
-       public Pager<DescriptionElementBase> search(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize,        Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+       public Pager<DescriptionElementBase> searchElements(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
         Integer numberOfResults = descriptionElementDao.count(clazz,queryString);\r
                \r
                List<DescriptionElementBase> results = new ArrayList<DescriptionElementBase>();\r
index 4f89220839a4720603089bf09455b1593d683d69..18b3dc6033fd55e37f7416923a2f46ce03481c7a 100644 (file)
@@ -15,6 +15,7 @@ import java.util.UUID;
 \r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.model.description.FeatureNode;\r
@@ -23,7 +24,7 @@ import eu.etaxonomy.cdm.persistence.dao.description.IFeatureNodeDao;
 import eu.etaxonomy.cdm.persistence.dao.description.IFeatureTreeDao;\r
 \r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class FeatureTreeServiceImpl extends IdentifiableServiceBase<FeatureTree, IFeatureTreeDao> implements IFeatureTreeService {\r
 \r
        private IFeatureNodeDao featureNodeDao;\r
index 980ef7c95e09699ac965d3695e0ae235f007a635..3dc5ac84dd19dafd0772651abb3dce18fc1ba1bb 100644 (file)
@@ -178,7 +178,7 @@ public interface IDescriptionService extends IIdentifiableEntityService<Descript
         * @return a Pager DescriptionElementBase instances\r
         * @see <a href="http://lucene.apache.org/java/2_4_0/queryparsersyntax.html">Apache Lucene - Query Parser Syntax</a>\r
         */\r
-       public Pager<DescriptionElementBase> search(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);\r
+       public Pager<DescriptionElementBase> searchElements(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);\r
        \r
        /**\r
      * Returns a List of Media that are associated with a given description element\r
index 7b64bac5bcd935b593789849e39dfebcc9dc50cf..0b827e8beb05f32df0050cdf28bdc033bbe2c02e 100644 (file)
@@ -93,4 +93,21 @@ public interface IIdentifiableEntityService<T extends IdentifiableEntity> extend
         * @return a paged list of instances of type T matching the queryString
         */
     public Pager<T> findByTitle(Class<? extends T> clazz, String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);
+    
+    /**
+        * Returns a Paged List of IdentifiableEntity instances where the default field matches the String queryString (as interpreted by the Lucene QueryParser)
+        * 
+        * @param clazz filter the results by class (or pass null to return all IdentifiableEntity instances)
+        * @param queryString
+        * @param pageSize The maximum number of identifiable entities returned (can be null for all matching identifiable entities)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+        * @param orderHints
+        *            Supports path like <code>orderHints.propertyNames</code> which
+        *            include *-to-one properties like createdBy.username or
+        *            authorTeam.persistentTitleCache
+        * @param propertyPaths properties to be initialized
+        * @return a Pager IdentifiableEntity instances
+        * @see <a href="http://lucene.apache.org/java/2_4_0/queryparsersyntax.html">Apache Lucene - Query Parser Syntax</a>
+        */
+       public Pager<T> search(Class<? extends T> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);
 }
index 86cfb283822c54da82b6855a60c5789430989cc2..841ee6b894233c189245cf3ace8c3ae5cab549a9 100644 (file)
@@ -18,13 +18,9 @@ import java.util.Set;
 import java.util.UUID;\r
 \r
 import org.hibernate.Session;\r
-import org.springframework.transaction.annotation.Propagation;\r
-import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.persistence.dao.BeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.query.Grouping;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
@@ -40,11 +36,9 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
  *\r
  * @param <T>\r
  */\r
-@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)\r
 public interface IService<T extends CdmBase>{\r
 \r
        // FIXME what does this method do?\r
-//     @Transactional(readOnly=false)\r
        public void clear();\r
 \r
        \r
@@ -63,7 +57,6 @@ public interface IService<T extends CdmBase>{
         * @param persistentObject the object to be deleted\r
         * @return the unique identifier of the deleted entity\r
         */\r
-       @Transactional(readOnly=false)\r
        public UUID delete(T persistentObject);\r
        \r
        /**\r
@@ -156,7 +149,6 @@ public interface IService<T extends CdmBase>{
         * @param transientObject the entity to be merged\r
         * @return The unique identifier of the persisted entity\r
         */\r
-       @Transactional(readOnly=false)\r
        public UUID merge(T transientObject);\r
        \r
        /**\r
@@ -188,7 +180,6 @@ public interface IService<T extends CdmBase>{
         * @param persistentObject the object to be refreshed\r
         * @return the unique identifier\r
         */\r
-       @Transactional(readOnly=false)\r
        public UUID refresh(T persistentObject);\r
        \r
        public List<T> rows(String tableName, int limit, int start);\r
@@ -199,7 +190,6 @@ public interface IService<T extends CdmBase>{
         * @return A Map containing the new entities, keyed using the generated UUID's\r
         *         of those entities\r
         */\r
-       @Transactional(readOnly=false)\r
        public Map<UUID,T> save(Collection<T> newInstances);    \r
        \r
        /**\r
@@ -207,7 +197,6 @@ public interface IService<T extends CdmBase>{
         * @param newInstance the new entity to be persisted\r
         * @return A generated UUID for the new persistent entity\r
         */\r
-       @Transactional(readOnly=false)\r
        public UUID save(T newInstance);\r
        \r
        /**\r
@@ -217,7 +206,6 @@ public interface IService<T extends CdmBase>{
         * @param transientObject the entity to be persisted\r
         * @return The unique identifier of the persisted entity\r
         */\r
-       @Transactional(readOnly=false)\r
        public UUID saveOrUpdate(T transientObject);\r
        \r
     /**\r
@@ -227,7 +215,6 @@ public interface IService<T extends CdmBase>{
         * @param transientObject the entity to be persisted\r
         * @return The unique identifier of the persisted entity\r
         */\r
-       @Transactional(readOnly=false)\r
        public UUID update(T transientObject);\r
        \r
        /**\r
index 5cb05f3f3563263ed51578e3a42679deb94da7a4..0c6c3ac499f6c24a12ebf878d0975f27907d3c00 100644 (file)
@@ -9,14 +9,22 @@
 \r
 package eu.etaxonomy.cdm.api.service;\r
 \r
+import java.util.UUID;\r
+\r
 import org.springframework.dao.DataAccessException;\r
+import org.springframework.security.GrantedAuthority;\r
 import org.springframework.security.userdetails.GroupManager;\r
 import org.springframework.security.userdetails.UserDetailsManager;\r
 import org.springframework.security.userdetails.UsernameNotFoundException;\r
 \r
+import eu.etaxonomy.cdm.model.common.Group;\r
 import eu.etaxonomy.cdm.model.common.User;\r
 \r
 public interface IUserService extends IService<User>, UserDetailsManager, GroupManager {\r
        \r
        public void changePasswordForUser(String username, String password) throws UsernameNotFoundException, DataAccessException;\r
+       \r
+       public UUID saveGrantedAuthority(GrantedAuthority grantedAuthority);\r
+       \r
+       public UUID saveGroup(Group group);\r
 }\r
index f4e010ed2cfa1894a0045c4c97e4ada711ecaa26..52d253ddf42bf24458104b6f4682e423922a3cdb 100644 (file)
@@ -31,14 +31,13 @@ import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;
 import eu.etaxonomy.cdm.persistence.query.MatchMode;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
 
-@Transactional(readOnly = true)
 public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO extends IIdentifiableDao<T>> extends AnnotatableServiceBase<T,DAO> 
                                                implements IIdentifiableEntityService<T>{
        @SuppressWarnings("unused")
        protected
        static final  Logger logger = Logger.getLogger(IdentifiableServiceBase.class);
 
-       
+       @Transactional(readOnly = true)
        public Pager<Rights> getRights(T t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
         Integer numberOfResults = dao.countRights(t);
                
@@ -49,7 +48,8 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
                
                return new DefaultPagerImpl<Rights>(pageNumber, numberOfResults, pageSize, results);
        }
-
+       
+       @Transactional(readOnly = true)
        public Pager<IdentifiableSource> getSources(T t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
                 Integer numberOfResults = dao.countSources(t);
                        
@@ -61,6 +61,7 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
                        return new DefaultPagerImpl<IdentifiableSource>(pageNumber, numberOfResults, pageSize, results);
        }
 
+       @Transactional(readOnly = true)
        protected List<T> findByTitle(IIdentifiableEntityServiceConfigurator config){
                return ((IIdentifiableDao)dao).findByTitle(config.getTitleSearchString(),
                                config.getMatchMode(), 0, -1, null);
@@ -75,13 +76,16 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
         * @param title
         * @return
         */
+       @Transactional(readOnly = true)
        protected List<T> findCdmObjectsByTitle(String title){
                return ((IIdentifiableDao)dao).findByTitle(title);
        }
        
+       @Transactional(readOnly = true)
        protected List<T> findCdmObjectsByTitle(String title, Class<T> clazz){
                return ((IIdentifiableDao)dao).findByTitleAndClass(title, clazz);
        }
+       @Transactional(readOnly = true)
        protected List<T> findCdmObjectsByTitle(String title, CdmBase sessionObject){
                return ((IIdentifiableDao)dao).findByTitle(title, sessionObject);
        }
@@ -91,6 +95,7 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
         *  (non-Javadoc)
         * @see eu.etaxonomy.cdm.api.service.ICommonService#getSourcedObjectById(java.lang.String, java.lang.String)
         */
+       @Transactional(readOnly = true)
        public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {
                ISourceable result = null;
 
@@ -104,10 +109,12 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
        /* (non-Javadoc)
         * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getUuidAndTitleCache()
         */
+       @Transactional(readOnly = true)
        public List<UuidAndTitleCache<T>> getUuidAndTitleCache() {
                return dao.getUuidAndTitleCache();
        }\r
-       \r
+       
+       @Transactional(readOnly = true)\r
        public Pager<T> findByTitle(Class<? extends T> clazz, String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
                 Integer numberOfResults = dao.countByTitle(clazz, queryString, matchmode, criteria);\r
                        \r
@@ -119,8 +126,21 @@ public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO e
                  return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);\r
        }
        
+       @Transactional(readOnly = true)
        public T find(LSID lsid) {
                return dao.find(lsid);
        }
+       
+       @Transactional(readOnly = true)
+       public Pager<T> search(Class<? extends T> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+        Integer numberOfResults = dao.count(clazz,queryString);
+               
+               List<T> results = new ArrayList<T>();
+               if(numberOfResults > 0) { // no point checking again
+                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); 
+               }
+               
+               return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
+       }
 }\r
 
index 67d141f2396bcab1d6e3a8f8cbbdba3a2646b9ae..04024dcf618f19ecad21960cda91668062dc806a 100644 (file)
@@ -18,6 +18,7 @@ import java.util.UUID;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
@@ -41,7 +42,7 @@ import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;
  * @version 1.0
  */
 @Service
-@Transactional(readOnly=true)
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
 public class LocationServiceImpl extends ServiceBase<DefinedTermBase,IDefinedTermDao> implements ILocationService {
        private static final Logger logger = Logger
                        .getLogger(LocationServiceImpl.class);
index bc32fa2a04a4309ffb498f93b9dc882f86107e79..7fe2d203d8c9259549e6064b1534b9ece44dcd75 100644 (file)
@@ -67,17 +67,6 @@ public class MediaServiceImpl extends IdentifiableServiceBase<Media,IMediaDao> i
                \r
                return new DefaultPagerImpl<Rights>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
-       \r
-       public Pager<Media> search(Class<? extends Media> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Integer numberOfResults = dao.count(clazz,queryString);\r
-               \r
-               List<Media> results = new ArrayList<Media>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
 \r
        public void generateTitleCache() {\r
                // TODO Auto-generated method stub\r
index ead3af93278c3384a591419282019faed1161de0..78cbe5cd09cf59161543c86cbfd574789b27ffdf 100644 (file)
@@ -14,7 +14,6 @@ import java.util.ArrayList;
 import java.util.Collection;\r
 import java.util.List;\r
 import java.util.Map;\r
-import java.util.Set;\r
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
@@ -22,21 +21,18 @@ import org.hibernate.criterion.Criterion;
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.beans.factory.annotation.Qualifier;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;\r
-import eu.etaxonomy.cdm.api.service.config.INameServiceConfigurator;\r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.ReferencedEntityBase;\r
 import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
-import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
@@ -46,11 +42,9 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
-import eu.etaxonomy.cdm.model.name.TypeDesignationStatusBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IOrderedTermVocabularyDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IReferencedEntityDao;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;\r
@@ -63,7 +57,7 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
 \r
 \r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxonNameDao> implements INameService {\r
        static private final Logger logger = Logger.getLogger(NameServiceImpl.class);\r
        \r
@@ -328,17 +322,6 @@ public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxo
                \r
                return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
-       \r
-       public Pager<TaxonNameBase> search(Class<? extends TaxonNameBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Integer numberOfResults = dao.count(clazz,queryString);\r
-               \r
-               List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
 \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.api.service.INameService#getUuidAndTitleCacheOfNames()\r
index 7b08ed60dfcf05f11a233b1bd23624edcbda823f..dc57e7953dfef1f93aed3bfe645e88a1f9bb267a 100644 (file)
 package eu.etaxonomy.cdm.api.service;\r
 \r
 import java.util.ArrayList;\r
-import java.util.Collection;\r
 import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
-import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
 import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;\r
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;\r
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;\r
-import eu.etaxonomy.cdm.persistence.dao.occurrence.ICollectionDao;\r
 import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 /**\r
  * @author a.babadshanjan\r
  * @created 01.09.2008\r
  */\r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObservationBase,IOccurrenceDao> implements IOccurrenceService {\r
 \r
        static private final Logger logger = Logger.getLogger(OccurrenceServiceImpl.class);\r
@@ -120,15 +114,4 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
                \r
                return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
-\r
-       public Pager<SpecimenOrObservationBase> search(Class<? extends SpecimenOrObservationBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Integer numberOfResults = dao.count(clazz,queryString);\r
-               \r
-               List<SpecimenOrObservationBase> results = new ArrayList<SpecimenOrObservationBase>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<SpecimenOrObservationBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
 }\r
index 1400b6202096fceb4b711dcbe040ce8717448348..92b2747f04d4435585c7a5dc3637575beef13c88 100644 (file)
 \r
 package eu.etaxonomy.cdm.api.service;\r
 \r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
 import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
-import eu.etaxonomy.cdm.api.service.pager.Pager;\r
-import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
-import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 \r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class ReferenceServiceImpl extends IdentifiableServiceBase<ReferenceBase,IReferenceDao> implements IReferenceService {\r
        \r
        static Logger logger = Logger.getLogger(ReferenceServiceImpl.class);\r
@@ -56,17 +46,6 @@ public class ReferenceServiceImpl extends IdentifiableServiceBase<ReferenceBase,
        protected void setDao(IReferenceDao dao) {\r
                this.dao = dao;\r
        }\r
-       \r
-       public Pager<ReferenceBase> search(Class<? extends ReferenceBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Integer numberOfResults = dao.count(clazz,queryString);\r
-               \r
-               List<ReferenceBase> results = new ArrayList<ReferenceBase>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<ReferenceBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
 \r
        public List<UuidAndTitleCache<ReferenceBase>> getUuidAndTitle() {\r
                \r
index f317607b9acaaeb7b67d6e4a9b1db112f893ae37..ea1a4bda8d8272c3cf5113c4335f37120e514770 100644 (file)
@@ -30,7 +30,6 @@ import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;
 import eu.etaxonomy.cdm.persistence.query.Grouping;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
-@Transactional(readOnly=true)\r
 public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T>> implements IService<T>, ApplicationContextAware {\r
        private static final Logger logger = Logger.getLogger(ServiceBase.class);\r
        \r
@@ -40,11 +39,12 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
 \r
        protected DAO dao;\r
 \r
-       //      @Transactional(readOnly = false)\r
+       @Transactional(readOnly = false)\r
        public void clear() {\r
                dao.clear();\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
        public int count(Class<? extends T> clazz) {\r
                return dao.count(clazz);\r
        }\r
@@ -54,34 +54,42 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
                return dao.delete(persistentObject);\r
        }\r
 \r
+       @Transactional(readOnly = true)\r
        public boolean exists(UUID uuid) {\r
                return dao.exists(uuid);\r
        }\r
 \r
+       @Transactional(readOnly = true)\r
        public List<T> find(Set<UUID> uuidSet) {\r
                return dao.findByUuid(uuidSet);\r
        }\r
 \r
+       @Transactional(readOnly = true)\r
        public T find(UUID uuid) {\r
                return dao.findByUuid(uuid);\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
        public Session getSession() {\r
                return dao.getSession();\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
        public List<Object[]> group(Class<? extends T> clazz,Integer limit, Integer start, List<Grouping> groups, List<String> propertyPaths) {\r
                return dao.group(clazz, limit, start, groups, propertyPaths);\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
        public  List<T> list(Class<? extends T> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths){\r
                return dao.list(type,limit, start, orderHints,propertyPaths);\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
        public T load(UUID uuid) {\r
                return dao.load(uuid);\r
        }\r
                \r
+       @Transactional(readOnly = true)\r
        public T load(UUID uuid, List<String> propertyPaths){\r
                return dao.load(uuid, propertyPaths);\r
        }\r
@@ -91,6 +99,7 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
                return dao.merge(newInstance);\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
        public  Pager<T> page(Class<? extends T> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths){\r
                Integer numberOfResults = dao.count(type);\r
                List<T> results = new ArrayList<T>();\r
@@ -102,6 +111,7 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
                return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
     public UUID refresh(T persistentObject) {\r
                return dao.refresh(persistentObject);\r
        }\r
@@ -112,6 +122,7 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
         * it seems a bit incongruous that we use an ORM to hide the fact that there is a \r
         * database, then expose a method that talks about "rows" . . .\r
         */\r
+       @Transactional(readOnly = true)\r
        public List<T> rows(String tableName, int limit, int start) {\r
                return dao.rows(tableName, limit, start);\r
        }\r
@@ -146,6 +157,7 @@ public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T
                return dao.update(transientObject);\r
        }\r
        \r
+       @Transactional(readOnly = true)\r
        public List<T> list(T example, Set<String> includeProperties, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
                return dao.list(example, includeProperties, limit, start, orderHints, propertyPaths);\r
        }\r
index b6438a41dfc02b599666c4dcfee2fe27fbb2c3a6..9a676948b5aa5cb5b3baa5eda486b669fc102e84 100644 (file)
@@ -11,7 +11,6 @@
 package eu.etaxonomy.cdm.api.service;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.springframework.beans.factory.annotation.Qualifier;\r
 import org.springframework.stereotype.Service;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
@@ -19,7 +18,6 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;\r
 \r
 @Service\r
-//@Service("mainService")\r
 @Transactional(readOnly = true)\r
 public class ServiceImpl extends ServiceBase<CdmBase, ICdmEntityDao<CdmBase>> implements IService<CdmBase> {\r
        @SuppressWarnings("unused")\r
index 5a5e9b510a4ef5c756f9686ca28a4ce1d391f7f4..edd83c42f85368dd95f380f5d9ea6383727301f1 100644 (file)
@@ -20,6 +20,7 @@ import java.util.UUID;
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;\r
@@ -58,7 +59,7 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
 \r
 \r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDao> implements ITaxonService{\r
        private static final Logger logger = Logger.getLogger(TaxonServiceImpl.class);\r
 \r
@@ -409,18 +410,6 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
                }\r
                return heterotypicSynonymyGroups;\r
        }\r
-\r
-       public Pager<TaxonBase> search(Class<? extends TaxonBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-        Integer numberOfResults = dao.count(clazz,queryString);\r
-               \r
-               List<TaxonBase> results = new ArrayList<TaxonBase>();\r
-               if(numberOfResults > 0) { // no point checking again\r
-                       results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<TaxonBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
-\r
        \r
        public Pager<IdentifiableEntity> findTaxaAndNames(ITaxonServiceConfigurator configurator) {\r
                \r
index 4a28945ebb76d6117a97df02acff59a49f35b400..43a8989238db84443cdd02ea90b9ee78c4e6046c 100644 (file)
@@ -22,6 +22,7 @@ import java.util.UUID;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
@@ -46,7 +47,7 @@ import eu.etaxonomy.cdm.persistence.query.OrderHint;
  * @version 1.0
  */
 @Service
-@Transactional(readOnly = true)
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
 public class TaxonTreeServiceImpl extends IdentifiableServiceBase<TaxonomicTree, ITaxonomicTreeDao>
                implements ITaxonTreeService {
        private static final Logger logger = Logger
index f2b82fa97a818d94433cc7532c09edc8517053e0..37abdf768976b049d4f1b867b081cdc00f66ba5c 100644 (file)
@@ -21,6 +21,7 @@ import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import eu.etaxonomy.cdm.api.service.pager.Pager;
@@ -42,7 +43,7 @@ import eu.etaxonomy.cdm.persistence.dao.common.IRepresentationDao;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;
 
 @Service
-@Transactional(readOnly = true)
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
 public class TermServiceImpl extends IdentifiableServiceBase<DefinedTermBase,IDefinedTermDao> implements ITermService{
        private static final Logger logger = Logger.getLogger(TermServiceImpl.class);
        private ILanguageStringDao languageStringDao;
index 41ce85643395495ebb0eb4b1f9cef2e518750604..b04a68ac84ea743e74fdbaf361e5c4054687695c 100644 (file)
@@ -31,6 +31,7 @@ import org.springframework.security.providers.encoding.PasswordEncoder;
 import org.springframework.security.userdetails.UserDetails;\r
 import org.springframework.security.userdetails.UsernameNotFoundException;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 import org.springframework.util.Assert;\r
 \r
@@ -42,7 +43,7 @@ import eu.etaxonomy.cdm.persistence.dao.common.IGroupDao;
 import eu.etaxonomy.cdm.persistence.dao.common.IUserDao;\r
 \r
 @Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class UserService extends ServiceBase<User,IUserDao> implements IUserService {\r
        \r
        protected IGroupDao groupDao;\r
index 188f9af01da2deb3b408b5b8e86db5ad78150b89..2afec1243f53d9a519068922c886beaeb05bfdda 100644 (file)
@@ -23,9 +23,9 @@ import eu.etaxonomy.cdm.model.view.AuditEventRecord;
 import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
 import eu.etaxonomy.cdm.persistence.dao.common.IVersionableDao;
 
-@Transactional(readOnly = true)
 public abstract class VersionableServiceBase<T extends VersionableEntity, DAO extends IVersionableDao<T>> extends ServiceBase<T,DAO> implements IVersionableService<T> {
 
+       @Transactional(readOnly = true)
        public Pager<AuditEventRecord<T>> pageAuditEvents(T t, Integer pageSize,        Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
                Integer numberOfResults = dao.countAuditEvents(t, sort);
                        
@@ -37,14 +37,17 @@ public abstract class VersionableServiceBase<T extends VersionableEntity, DAO ex
                return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
        }
 
+       @Transactional(readOnly = true)
        public AuditEventRecord<T> getNextAuditEvent(T t) {
                return dao.getNextAuditEvent(t);
        }
 
+       @Transactional(readOnly = true)
        public AuditEventRecord<T> getPreviousAuditEvent(T t) {
                return dao.getPreviousAuditEvent(t);
        }
        
+       @Transactional(readOnly = true)
        public Pager<AuditEventRecord<T>> pageAuditEvents(Class<? extends T> clazz,AuditEvent from,AuditEvent to, List<AuditCriterion> criteria, Integer pageSize, Integer pageNumber, AuditEventSort sort,List<String> propertyPaths) {
                Integer numberOfResults = dao.countAuditEvents(clazz, from, to, criteria);
                
index ffde33b7d51b2201e26f950eb14a06c0381b2975..c9c3cf4b89a1bfa0d95a8c1869952ef9d0cc0274 100644 (file)
@@ -11,16 +11,15 @@ package eu.etaxonomy.cdm.api.service;
 \r
 import java.util.ArrayList;\r
 import java.util.List;\r
-import java.util.Set;\r
 import java.util.UUID;\r
 \r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
 import org.springframework.transaction.annotation.Transactional;\r
 \r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
-import eu.etaxonomy.cdm.model.agent.Address;\r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
@@ -29,7 +28,7 @@ import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 \r
 @Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class VocabularyServiceImpl extends IdentifiableServiceBase<TermVocabulary,ITermVocabularyDao>  implements IVocabularyService {\r
 \r
        @Autowired\r