001    /*
002     * Copyright 2005-2008 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;
018    
019    import org.kuali.rice.ksb.service.KSBServiceLocator;
020    import org.springframework.beans.factory.InitializingBean;
021    import org.springframework.context.ApplicationContext;
022    import org.springframework.context.ApplicationContextAware;
023    
024    /**
025     * Used from Spring to register service definitions from an already configured and started KSB.
026     * 
027     * @author Kuali Rice Team (rice.collab@kuali.org)
028     */
029    public class KSBExporter implements InitializingBean, ApplicationContextAware {
030            
031            private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(KSBExporter.class);
032            
033            private ServiceDefinition serviceDefinition;
034            private boolean forceRefresh = false;
035            protected RemotedServiceRegistry remotedServiceRegistry;
036            protected ApplicationContext applicationContext;
037    
038            public void afterPropertiesSet() throws Exception {
039                    this.getServiceDefinition().validate();
040                    if ( LOG.isInfoEnabled() ) {
041                            LOG.info("Attempting to expose service with localServiceName '" + this.getServiceDefinition().getLocalServiceName() + "' and QName '" + this.getServiceDefinition().getServiceName() + "'");
042                    }
043                    if(getRemotedServiceRegistry()!=null) {
044                            getRemotedServiceRegistry().registerService(this.getServiceDefinition(), this.isForceRefresh());
045                    } else if ( KSBServiceLocator.getServiceDeployer() != null ) {
046                            KSBServiceLocator.getServiceDeployer().registerService(this.getServiceDefinition(), this.isForceRefresh());
047                    } else {
048                            ((RemotedServiceRegistry)applicationContext.getBean( KSBServiceLocator.REMOTED_SERVICE_REGISTRY )).registerService(this.getServiceDefinition(), this.isForceRefresh());
049                    }
050            }
051    
052            public ServiceDefinition getServiceDefinition() {
053                    return serviceDefinition;
054            }
055    
056            public void setServiceDefinition(ServiceDefinition serviceDefinition) {
057                    this.serviceDefinition = serviceDefinition;
058            }
059    
060            public boolean isForceRefresh() {
061                    return forceRefresh;
062            }
063    
064            public void setForceRefresh(boolean forceRefresh) {
065                    this.forceRefresh = forceRefresh;
066            }
067    
068            /**
069             * @return the remotedServiceRegistry
070             */
071            public RemotedServiceRegistry getRemotedServiceRegistry() {
072                    return this.remotedServiceRegistry;
073            }
074    
075            /**
076             * @param remotedServiceRegistry the remotedServiceRegistry to set
077             */
078            public void setRemotedServiceRegistry(
079                            RemotedServiceRegistry remotedServiceRegistry) {
080                    this.remotedServiceRegistry = remotedServiceRegistry;
081            }
082    
083            public void setApplicationContext(ApplicationContext applicationContext) {
084                    this.applicationContext = applicationContext;
085            }
086    
087    }