001    /*
002     * Copyright 2005-2007 The Kuali Foundation
003     * 
004     * 
005     * Licensed under the Educational Community License, Version 2.0 (the "License");
006     * you may not use this file except in compliance with the License.
007     * You may obtain a copy of the License at
008     * 
009     * http://www.opensource.org/licenses/ecl2.php
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.kuali.rice.ksb.messaging.objectremoting;
018    
019    import javax.transaction.Synchronization;
020    import javax.xml.namespace.QName;
021    
022    import org.apache.log4j.Logger;
023    import org.kuali.rice.core.resourceloader.GlobalResourceLoader;
024    import org.springframework.transaction.support.TransactionSynchronization;
025    
026    /**
027     * {@link Synchronization} to cleanup any remote objects created during the
028     * current transaction.
029     * 
030     * @author Kuali Rice Team (rice.collab@kuali.org)
031     */
032    public class RemoteObjectCleanup implements TransactionSynchronization {
033    
034            private static final Logger LOG = Logger.getLogger(RemoteObjectCleanup.class);
035    
036            private QName objectRemoterName;
037    
038            private QName serviceToRemove;
039    
040            public RemoteObjectCleanup(QName objectRemoterName, QName serviceToRemove) {
041                    this.setObjectRemoterName(objectRemoterName);
042                    this.setServiceToRemove(serviceToRemove);
043            }
044    
045            public void afterCompletion(int status) {
046                    LOG.debug("Removing service: " + this.getServiceToRemove() + " from ObjectRemoter: " + this.getObjectRemoterName());
047                    ObjectRemoterService objectRemoter = (ObjectRemoterService) GlobalResourceLoader.getService(this.getObjectRemoterName());
048                    objectRemoter.removeService(this.getServiceToRemove());
049            }
050    
051            public void beforeCompletion() {
052                // template method
053            }
054    
055            public QName getObjectRemoterName() {
056                    return this.objectRemoterName;
057            }
058    
059            public void setObjectRemoterName(QName objectRemoterName) {
060                    this.objectRemoterName = objectRemoterName;
061            }
062    
063            public QName getServiceToRemove() {
064                    return this.serviceToRemove;
065            }
066    
067            public void setServiceToRemove(QName serviceToRemove) {
068                    this.serviceToRemove = serviceToRemove;
069            }
070    
071            public void afterCommit() {
072            }
073    
074            public void beforeCommit(boolean readOnly) {
075            }
076    
077            public void resume() {
078            }
079    
080            public void suspend() {
081            }
082    }