2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.api
.application
;
12 import java
.util
.EnumSet
;
13 import java
.util
.List
;
14 import java
.util
.Properties
;
15 import java
.util
.UUID
;
17 import org
.apache
.log4j
.Logger
;
18 import org
.hibernate
.SessionFactory
;
19 import org
.springframework
.beans
.MutablePropertyValues
;
20 import org
.springframework
.beans
.factory
.config
.BeanDefinition
;
21 import org
.springframework
.beans
.factory
.xml
.XmlBeanDefinitionReader
;
22 import org
.springframework
.context
.ApplicationListener
;
23 import org
.springframework
.context
.support
.AbstractApplicationContext
;
24 import org
.springframework
.core
.io
.ClassPathResource
;
25 import org
.springframework
.core
.io
.Resource
;
26 import org
.springframework
.security
.authentication
.ProviderManager
;
27 import org
.springframework
.security
.authentication
.UsernamePasswordAuthenticationToken
;
28 import org
.springframework
.security
.core
.Authentication
;
29 import org
.springframework
.security
.core
.context
.SecurityContext
;
30 import org
.springframework
.security
.core
.context
.SecurityContextHolder
;
31 import org
.springframework
.transaction
.PlatformTransactionManager
;
32 import org
.springframework
.transaction
.TransactionStatus
;
34 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
35 import eu
.etaxonomy
.cdm
.api
.service
.IAgentService
;
36 import eu
.etaxonomy
.cdm
.api
.service
.IAnnotationService
;
37 import eu
.etaxonomy
.cdm
.api
.service
.IClassificationService
;
38 import eu
.etaxonomy
.cdm
.api
.service
.ICollectionService
;
39 import eu
.etaxonomy
.cdm
.api
.service
.ICommonService
;
40 import eu
.etaxonomy
.cdm
.api
.service
.IDatabaseService
;
41 import eu
.etaxonomy
.cdm
.api
.service
.IDescriptionService
;
42 import eu
.etaxonomy
.cdm
.api
.service
.IDescriptiveDataSetService
;
43 import eu
.etaxonomy
.cdm
.api
.service
.IEntityConstraintViolationService
;
44 import eu
.etaxonomy
.cdm
.api
.service
.IEntityValidationService
;
45 import eu
.etaxonomy
.cdm
.api
.service
.IEventBaseService
;
46 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureNodeService
;
47 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureTreeService
;
48 import eu
.etaxonomy
.cdm
.api
.service
.IGrantedAuthorityService
;
49 import eu
.etaxonomy
.cdm
.api
.service
.IGroupService
;
50 import eu
.etaxonomy
.cdm
.api
.service
.IIdentificationKeyService
;
51 import eu
.etaxonomy
.cdm
.api
.service
.ILocationService
;
52 import eu
.etaxonomy
.cdm
.api
.service
.IMediaService
;
53 import eu
.etaxonomy
.cdm
.api
.service
.IMetadataService
;
54 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
55 import eu
.etaxonomy
.cdm
.api
.service
.IOccurrenceService
;
56 import eu
.etaxonomy
.cdm
.api
.service
.IPolytomousKeyNodeService
;
57 import eu
.etaxonomy
.cdm
.api
.service
.IPolytomousKeyService
;
58 import eu
.etaxonomy
.cdm
.api
.service
.IPreferenceService
;
59 import eu
.etaxonomy
.cdm
.api
.service
.IProgressMonitorService
;
60 import eu
.etaxonomy
.cdm
.api
.service
.IReferenceService
;
61 import eu
.etaxonomy
.cdm
.api
.service
.IRegistrationService
;
62 import eu
.etaxonomy
.cdm
.api
.service
.IRightsService
;
63 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonNodeService
;
64 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
65 import eu
.etaxonomy
.cdm
.api
.service
.ITermNodeService
;
66 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
67 import eu
.etaxonomy
.cdm
.api
.service
.ITermTreeService
;
68 import eu
.etaxonomy
.cdm
.api
.service
.IUserService
;
69 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
70 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.IAmplificationService
;
71 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.IPrimerService
;
72 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.ISequenceService
;
73 import eu
.etaxonomy
.cdm
.common
.monitor
.IProgressMonitor
;
74 import eu
.etaxonomy
.cdm
.common
.monitor
.NullProgressMonitor
;
75 import eu
.etaxonomy
.cdm
.common
.monitor
.SubProgressMonitor
;
76 import eu
.etaxonomy
.cdm
.database
.CdmPersistentDataSource
;
77 import eu
.etaxonomy
.cdm
.database
.DataSourceNotFoundException
;
78 import eu
.etaxonomy
.cdm
.database
.DbSchemaValidation
;
79 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
80 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
81 import eu
.etaxonomy
.cdm
.model
.permission
.CRUD
;
82 import eu
.etaxonomy
.cdm
.model
.term
.DefinedTermBase
;
83 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.HibernateConfiguration
;
84 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.permission
.ICdmPermissionEvaluator
;
89 public class CdmApplicationController
implements ICdmRepository
{
90 private static final Logger logger
= Logger
.getLogger(CdmApplicationController
.class);
92 public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE
= "/eu/etaxonomy/cdm/defaultApplicationContext.xml";
94 public AbstractApplicationContext applicationContext
;
95 protected ICdmRepository configuration
;
96 private final Resource applicationContextResource
;
98 private final IProgressMonitor progressMonitor
;
100 final protected static DbSchemaValidation defaultDbSchemaValidation
= DbSchemaValidation
.VALIDATE
;
104 * Constructor, opens a spring ApplicationContext by using the default data source
106 * @throws DataSourceNotFoundException
108 public static CdmApplicationController
NewInstance() throws DataSourceNotFoundException
{
109 logger
.info("Start CdmApplicationController with default data source");
110 CdmPersistentDataSource dataSource
= getDefaultDatasource();
111 DbSchemaValidation dbSchemaValidation
= defaultDbSchemaValidation
;
112 return CdmApplicationController
.NewInstance(null, dataSource
, dbSchemaValidation
, false);
117 * Constructor, opens a spring ApplicationContext by using the default data source
119 * @param dbSchemaValidation
120 * validation type for database schema
121 * @throws DataSourceNotFoundException
123 public static CdmApplicationController
NewInstance(DbSchemaValidation dbSchemaValidation
) throws DataSourceNotFoundException
{
124 logger
.info("Start CdmApplicationController with default data source");
125 CdmPersistentDataSource dataSource
= getDefaultDatasource();
126 return CdmApplicationController
.NewInstance(null, dataSource
, dbSchemaValidation
, false);
131 * Constructor, opens an spring ApplicationContext by using the according data source
132 * and the default database schema validation type
136 public static CdmApplicationController
NewInstance(ICdmDataSource dataSource
){
137 return CdmApplicationController
.NewInstance(null, dataSource
, defaultDbSchemaValidation
, false);
141 public static CdmApplicationController
NewInstance(ICdmDataSource dataSource
, DbSchemaValidation dbSchemaValidation
){
142 return CdmApplicationController
.NewInstance(null, dataSource
, dbSchemaValidation
, false);
146 public static CdmApplicationController
NewInstance(ICdmDataSource dataSource
, DbSchemaValidation dbSchemaValidation
, boolean omitTermLoading
){
147 return CdmApplicationController
.NewInstance(null, dataSource
, dbSchemaValidation
, omitTermLoading
);
150 public static CdmApplicationController
NewInstance(Resource applicationContextResource
, ICdmDataSource dataSource
,
151 DbSchemaValidation dbSchemaValidation
, boolean omitTermLoading
){
152 return CdmApplicationController
.NewInstance(applicationContextResource
, dataSource
, dbSchemaValidation
,
153 null, omitTermLoading
, null);
155 public static CdmApplicationController
NewInstance(Resource applicationContextResource
, ICdmDataSource dataSource
,
156 DbSchemaValidation dbSchemaValidation
, boolean omitTermLoading
, IProgressMonitor progressMonitor
){
157 return new CdmApplicationController(applicationContextResource
, dataSource
, dbSchemaValidation
,
158 null, omitTermLoading
, progressMonitor
, null);
160 public static CdmApplicationController
NewInstance(Resource applicationContextResource
, ICdmDataSource dataSource
,
161 DbSchemaValidation dbSchemaValidation
, HibernateConfiguration hibernateConfig
,
162 boolean omitTermLoading
, IProgressMonitor progressMonitor
){
163 return new CdmApplicationController(applicationContextResource
, dataSource
, dbSchemaValidation
,
164 hibernateConfig
, omitTermLoading
, progressMonitor
, null);
168 //TODO discuss need for listeners before commit to trunk
169 // public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners) {
170 // return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation, omitTermLoading, progressMonitor,listeners);
176 protected static ClassPathResource
getClasspathResource(){
177 return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE
);
183 * @throws DataSourceNotFoundException
185 protected static CdmPersistentDataSource
getDefaultDatasource() throws DataSourceNotFoundException
{
186 CdmPersistentDataSource dataSource
= CdmPersistentDataSource
.NewDefaultInstance();
193 * FIXME:Remoting this constructor is added only to allow extension of this cntroller
194 * class. and should be removed after refactoring
196 protected CdmApplicationController(){
197 applicationContextResource
= null;
198 progressMonitor
= null;
203 * Constructor, opens an spring 2.5 ApplicationContext by using the according data
207 * @param dbSchemaValidation
208 * @param omitTermLoading
210 protected CdmApplicationController(Resource applicationContextResource
, ICdmDataSource dataSource
, DbSchemaValidation dbSchemaValidation
,
211 HibernateConfiguration hibernateConfig
,
212 boolean omitTermLoading
, IProgressMonitor progressMonitor
, List
<ApplicationListener
> listeners
){
213 logger
.info("Start CdmApplicationController with datasource: " + dataSource
.getName());
215 if (dbSchemaValidation
== null) {
216 dbSchemaValidation
= defaultDbSchemaValidation
;
218 this.applicationContextResource
= applicationContextResource
!= null ? applicationContextResource
: getClasspathResource();
219 this.progressMonitor
= progressMonitor
!= null ? progressMonitor
: new NullProgressMonitor();
221 setNewDataSource(dataSource
, dbSchemaValidation
, hibernateConfig
, omitTermLoading
, listeners
);
226 * Sets the application context to a new spring ApplicationContext by using the
227 * according data source and initializes the Controller.
231 private boolean setNewDataSource(ICdmDataSource dataSource
, DbSchemaValidation dbSchemaValidation
,
232 HibernateConfiguration hibernateConfig
,
233 boolean omitTermLoading
, List
<ApplicationListener
> listeners
){
235 if (dbSchemaValidation
== null) {
236 dbSchemaValidation
= defaultDbSchemaValidation
;
238 logger
.info("Connecting to '" + dataSource
.getName() + "'");
240 MonitoredGenericApplicationContext applicationContext
= new MonitoredGenericApplicationContext();
241 int refreshTasks
= 45;
242 int nTasks
= 5 + refreshTasks
;
243 // nTasks += applicationContext.countTasks();
244 progressMonitor
.beginTask("Connecting to '" + dataSource
.getName() + "'", nTasks
);
246 // progressMonitor.worked(1);
248 BeanDefinition datasourceBean
= dataSource
.getDatasourceBean();
249 datasourceBean
.setAttribute("isLazy", false);
250 progressMonitor
.subTask("Registering datasource.");
251 applicationContext
.registerBeanDefinition("dataSource", datasourceBean
);
252 progressMonitor
.worked(1);
254 BeanDefinition hibernatePropBean
= dataSource
.getHibernatePropertiesBean(dbSchemaValidation
, hibernateConfig
);
255 applicationContext
.registerBeanDefinition("hibernateProperties", hibernatePropBean
);
257 XmlBeanDefinitionReader xmlReader
= new XmlBeanDefinitionReader(applicationContext
);
258 progressMonitor
.subTask("Registering resources.");
259 xmlReader
.loadBeanDefinitions(applicationContextResource
);
260 progressMonitor
.worked(1);
263 if (omitTermLoading
== true) {
264 String initializerName
= "persistentTermInitializer";
265 BeanDefinition beanDef
= applicationContext
.getBeanDefinition(initializerName
);
266 MutablePropertyValues values
= beanDef
.getPropertyValues();
267 values
.addPropertyValue("omit", omitTermLoading
);
270 if (listeners
!= null) {
271 for (ApplicationListener
<?
> listener
: listeners
) {
272 applicationContext
.addApplicationListener(listener
);
276 // String message = "Start application context. This might take a while ...";
277 //// progressMonitor.subTask(message);
278 // SubProgressMonitor subMonitor= new SubProgressMonitor(progressMonitor, 10);
279 // subMonitor.beginTask(message, 2);
280 // applicationContext.setProgressMonitor(subMonitor);
282 applicationContext
.refresh(new SubProgressMonitor(progressMonitor
, refreshTasks
));
283 applicationContext
.start();
284 // progressMonitor.worked(1);
286 progressMonitor
.subTask("Cleaning up.");
287 setApplicationContext(applicationContext
);
288 progressMonitor
.worked(1);
290 progressMonitor
.done();
295 * Overrides all default with values in hibernate config, if defined
296 * @param hibernatePropBean
297 * @param hibernateConfig
299 private void registerHibernateConfig(BeanDefinition hibernatePropBean
, HibernateConfiguration hibernateConfig
) {
300 setHibernateProperty(hibernatePropBean
, HibernateConfiguration
.REGISTER_ENVERS
,
301 hibernateConfig
.getRegisterEnvers());
302 setHibernateProperty(hibernatePropBean
, HibernateConfiguration
.REGISTER_SEARCH
,
303 hibernateConfig
.getRegisterSearch());
304 setHibernateProperty(hibernatePropBean
, HibernateConfiguration
.SHOW_SQL
,
305 hibernateConfig
.getShowSql());
306 setHibernateProperty(hibernatePropBean
, HibernateConfiguration
.FORMAT_SQL
,
307 hibernateConfig
.getFormatSql());
311 private void setHibernateProperty(BeanDefinition hibernatePropBean
, String key
, Boolean value
) {
313 setHibernateProperty(hibernatePropBean
, key
, String
.valueOf(value
));
316 private void setHibernateProperty(BeanDefinition hibernatePropBean
, String key
, String value
) {
318 Properties props
= (Properties
)hibernatePropBean
.getPropertyValues().get("properties");
319 props
.setProperty(key
, value
);
325 * Tests if some DefinedTermsAreMissing.
327 * @return true, if at least one is missing, else false
329 public boolean testDefinedTermsAreMissing(){
330 UUID englishUuid
= UUID
.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
331 DefinedTermBase
<?
> english
= this.getTermService().load(englishUuid
);
332 if (english
== null || !english
.getUuid().equals(englishUuid
)) {
342 * Changes the ApplicationContext to the new dataSource
346 public boolean changeDataSource(ICdmDataSource dataSource
){
347 //logger.info("Change datasource to : " + dataSource);
348 return setNewDataSource(dataSource
, DbSchemaValidation
.VALIDATE
, null, false, null);
353 * Changes the ApplicationContext to the new dataSource
356 * @param dbSchemaValidation
358 public boolean changeDataSource(ICdmDataSource dataSource
, DbSchemaValidation dbSchemaValidation
){
359 //logger.info("Change datasource to : " + dataSource);
360 return setNewDataSource(dataSource
, dbSchemaValidation
, null, false, null);
365 * Changes the ApplicationContext to the new dataSource
368 * @param dbSchemaValidation
369 * @param omitTermLoading
371 public boolean changeDataSource(ICdmDataSource dataSource
, DbSchemaValidation dbSchemaValidation
, boolean omitTermLoading
){
372 logger
.info("Change datasource to : " + dataSource
);
373 return setNewDataSource(dataSource
, dbSchemaValidation
, null, omitTermLoading
, null);
378 * Changes the ApplicationContext to the new dataSource
381 * @param dbSchemaValidation
382 * @param omitTermLoading
384 public boolean changeDataSource(ICdmDataSource dataSource
, DbSchemaValidation dbSchemaValidation
, boolean omitTermLoading
,
385 List
<ApplicationListener
> listeners
){
386 logger
.info("Change datasource to : " + dataSource
);
387 return setNewDataSource(dataSource
, dbSchemaValidation
, null, omitTermLoading
, listeners
);
392 * Sets a new application Context.
396 public void setApplicationContext(AbstractApplicationContext ac
){
397 closeApplicationContext(); //closes old application context if necessary
398 applicationContext
= ac
;
399 applicationContext
.registerShutdownHook();
404 public void finalize(){
409 * closes the application
412 closeApplicationContext();
417 * closes the application context
419 protected void closeApplicationContext(){
420 if (applicationContext
!= null) {
421 logger
.info("Close ApplicationContext");
422 applicationContext
.close();
427 protected void init(){
428 logger
.debug("Init " + this.getClass().getName() + " ... ");
429 if (logger
.isDebugEnabled()) {
430 for (String beanName
: applicationContext
.getBeanDefinitionNames()) {
431 logger
.debug(beanName
);
434 //TODO delete next row (was just for testing)
435 if (logger
.isInfoEnabled()) {
436 logger
.info("Registered Beans: ");
437 String
[] beanNames
= applicationContext
.getBeanDefinitionNames();
438 for (String beanName
: beanNames
) {
439 logger
.info(beanName
);
442 configuration
= (ICdmRepository
) applicationContext
.getBean("cdmRepository");
444 //FIXME:Remoting catching exection to allow for remoting
445 getDatabaseService().setApplicationController(this);
447 catch (UnsupportedOperationException uoe
) {
448 logger
.warn("getDatabaseService() is not implmented for current application context");
453 /* ****** Services ******** */
455 public final IAnnotationService
getAnnotationService(){
456 return configuration
.getAnnotationService();
460 public final INameService
getNameService(){
461 return configuration
.getNameService();
466 public final ITaxonService
getTaxonService(){
467 return configuration
.getTaxonService();
472 public final IClassificationService
getClassificationService(){
473 return configuration
.getClassificationService();
478 public final ITaxonNodeService
getTaxonNodeService(){
480 return configuration
.getTaxonNodeService();
481 } catch (Exception e
){
489 public final IReferenceService
getReferenceService(){
490 return configuration
.getReferenceService();
495 public final IAgentService
getAgentService(){
496 return configuration
.getAgentService();
501 public final IDatabaseService
getDatabaseService(){
502 return configuration
.getDatabaseService();
507 public final ITermService
getTermService(){
508 return configuration
.getTermService();
513 public final IDescriptionService
getDescriptionService(){
514 return configuration
.getDescriptionService();
519 public final IOccurrenceService
getOccurrenceService(){
520 return configuration
.getOccurrenceService();
524 public IAmplificationService
getAmplificationService(){
525 return configuration
.getAmplificationService();
529 public ISequenceService
getSequenceService(){
530 return configuration
.getSequenceService();
534 public IEventBaseService
getEventBaseService() {
535 return configuration
.getEventBaseService();
541 public final IPrimerService
getPrimerService(){
542 return configuration
.getPrimerService();
547 public final IMediaService
getMediaService(){
548 return configuration
.getMediaService();
553 public final IMetadataService
getMetadataService(){
554 return configuration
.getMetadataService();
559 public final ICommonService
getCommonService(){
560 return configuration
.getCommonService();
565 public final ILocationService
getLocationService(){
566 return configuration
.getLocationService();
571 public final IUserService
getUserService(){
572 return configuration
.getUserService();
577 public final IGrantedAuthorityService
getGrantedAuthorityService(){
578 return configuration
.getGrantedAuthorityService();
583 public IGroupService
getGroupService(){
584 return configuration
.getGroupService();
589 public final ICollectionService
getCollectionService(){
590 return configuration
.getCollectionService();
595 public final IFeatureTreeService
getFeatureTreeService(){
596 return configuration
.getFeatureTreeService();
600 public final ITermTreeService
getTermTreeService(){
601 return configuration
.getTermTreeService();
605 public final IPreferenceService
getPreferenceService(){
606 return configuration
.getPreferenceService();
611 public final IFeatureNodeService
getFeatureNodeService(){
612 return configuration
.getFeatureNodeService();
616 public final ITermNodeService
getTermNodeService(){
617 return configuration
.getTermNodeService();
622 public final IVocabularyService
getVocabularyService(){
623 return configuration
.getVocabularyService();
628 public final IIdentificationKeyService
getIdentificationKeyService(){
629 return configuration
.getIdentificationKeyService();
634 public final IPolytomousKeyService
getPolytomousKeyService(){
635 return configuration
.getPolytomousKeyService();
640 public final IPolytomousKeyNodeService
getPolytomousKeyNodeService(){
641 return configuration
.getPolytomousKeyNodeService();
649 public IProgressMonitorService
getProgressMonitorService() {
650 return configuration
.getProgressMonitorService();
655 public IEntityValidationService
getEntityValidationService(){
656 return configuration
.getEntityValidationService();
661 public IEntityConstraintViolationService
getEntityConstraintViolationService(){
662 return configuration
.getEntityConstraintViolationService();
666 public final IDescriptiveDataSetService
getDescriptiveDataSetService(){
667 return configuration
.getDescriptiveDataSetService();
672 public final ConversationHolder
NewConversation(){
673 //return (ConversationHolder)applicationContext.getBean("conversationHolder");
674 return configuration
.NewConversation();
678 /* **** Security ***** */
681 public void authenticate(String username
, String password
){
682 UsernamePasswordAuthenticationToken tokenForUser
= new UsernamePasswordAuthenticationToken(username
, password
);
683 Authentication authentication
= this.getAuthenticationManager().authenticate(tokenForUser
);
684 SecurityContext context
= SecurityContextHolder
.getContext();
685 context
.setAuthentication(authentication
);
689 public final ProviderManager
getAuthenticationManager(){
690 return configuration
.getAuthenticationManager();
695 public ICdmPermissionEvaluator
getPermissionEvaluator(){
696 return configuration
.getPermissionEvaluator();
700 * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication,
701 * java.lang.Object, java.lang.Object)
703 * @param targetDomainObject
707 public boolean currentAuthentiationHasPermissions(CdmBase targetDomainObject
, EnumSet
<CRUD
> permission
){
708 SecurityContext context
= SecurityContextHolder
.getContext();
709 return getPermissionEvaluator().hasPermission(context
.getAuthentication(), targetDomainObject
, permission
);
714 public final PlatformTransactionManager
getTransactionManager(){
715 return configuration
.getTransactionManager();
720 public final Object
getBean(String name
){
721 return this.applicationContext
.getBean(name
);
726 * OLD TRANSACTION STUFF
729 /* **** flush ********** */
731 SessionFactory sf
= (SessionFactory
) applicationContext
.getBean("sessionFactory");
732 sf
.getCurrentSession().flush();
736 public SessionFactory
getSessionFactory(){
737 return (SessionFactory
) applicationContext
.getBean("sessionFactory");
742 public TransactionStatus
startTransaction(){
743 return startTransaction(false);
748 public TransactionStatus
startTransaction(Boolean readOnly
){
749 return configuration
.startTransaction(readOnly
);
753 public void commitTransaction(TransactionStatus txStatus
){
754 PlatformTransactionManager txManager
= configuration
.getTransactionManager();
755 txManager
.commit(txStatus
);
760 public void rollback(TransactionStatus txStatus
){
761 PlatformTransactionManager txManager
= configuration
.getTransactionManager();
762 txManager
.rollback(txStatus
);
771 public IRightsService
getRightsService() {
772 return configuration
.getRightsService();
780 public IRegistrationService
getRegistrationService() {
781 return configuration
.getRegistrationService();