001 /**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.ken.core;
017
018 import org.apache.log4j.Logger;
019 import org.kuali.rice.core.api.lifecycle.LifecycleBean;
020 import org.springframework.beans.BeansException;
021 import org.springframework.beans.factory.BeanFactory;
022 import org.springframework.beans.factory.BeanFactoryAware;
023 import org.springframework.transaction.PlatformTransactionManager;
024 import org.springframework.transaction.support.TransactionTemplate;
025
026 import javax.sql.DataSource;
027
028 /**
029 * Eager-initializing singleton bean that performs some notification startup operations
030 * @author Kuali Rice Team (rice.collab@kuali.org)
031 */
032 public class NotificationLifeCycle extends LifecycleBean implements BeanFactoryAware {
033 private static final Logger LOG = Logger.getLogger(NotificationLifeCycle.class);
034
035 //private String ojbPlatform;
036 private BeanFactory theFactory;
037 private PlatformTransactionManager txMgr;
038 private DataSource dataSource;
039
040 /**
041 * This method sets the OJB platform.
042 * @param platform
043 */
044 /*
045 public void setOjbPlatform(String platform) {
046 this.ojbPlatform = platform;
047 }*/
048
049 /**
050 * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory)
051 */
052 public void setBeanFactory(BeanFactory theFactory) throws BeansException {
053 this.theFactory = theFactory;
054 }
055
056 public void setTransactionManager(PlatformTransactionManager txMgr) {
057 this.txMgr = txMgr;
058 }
059
060 public void setDataSource(DataSource dataSource) {
061 this.dataSource = dataSource;
062 }
063
064 /**
065 * Helper method for creating a TransactionTemplate initialized to create
066 * a new transaction
067 * @return a TransactionTemplate initialized to create a new transaction
068 */
069 protected TransactionTemplate createNewTransaction() {
070 TransactionTemplate tt = new TransactionTemplate(txMgr);
071 tt.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRES_NEW);
072 return tt;
073 }
074
075 /**
076 * @see org.kuali.rice.ken.core.BaseLifecycle#start()
077 */
078 public void start() throws Exception {
079 /*if (ojbPlatform == null) {
080 throw new BeanInitializationException("No platform was configured, please configure the datasource.ojb.platform property.");
081 }*/
082
083 GlobalNotificationServiceLocator.init(theFactory);
084 /*
085 createNewTransaction().execute(new TransactionCallback() {
086 public Object doInTransaction(TransactionStatus txStatus) {
087 JdbcTemplate t = new JdbcTemplate(dataSource);
088 Boolean dataLoaded = (Boolean) t.execute(new StatementCallback() {
089 public Object doInStatement(Statement stmt) throws SQLException, DataAccessException {
090 ResultSet rs = stmt.executeQuery("select * from APP_META_T where NAME = 'ken.bootstrap.loaded' and VALUE = 'true'");
091 try {
092 return rs.next();
093 } finally {
094 rs.close();
095 }
096 }
097 });
098 if (!dataLoaded.booleanValue()) {
099 loadXmlFile("classpath:data/NotificationData.xml");
100
101 t.execute(new StatementCallback() {
102 public Object doInStatement(Statement stmt) throws SQLException, DataAccessException {
103 ResultSet rs = stmt.executeQuery("update APP_META_T where NAME = 'ken.bootstrap.loaded' and VALUE = 'true'");
104 try {
105 return rs.next();
106 } finally {
107 rs.close();
108 }
109 }
110 });
111 }
112 }
113 });
114 */
115
116 //LOG.info("Setting OJB platform to: " + ojbPlatform);
117 //PersistenceBrokerFactory.defaultPersistenceBroker().serviceConnectionManager().getConnectionDescriptor().setDbms(ojbPlatform);
118 super.start();
119 }
120
121 // yanked from KEWXmlDataLoaderLifecycle
122 /*
123 protected void loadXmlFile(String fileName) throws Exception {
124 Resource resource = new DefaultResourceLoader().getResource(fileName);
125 InputStream xmlFile = resource.getInputStream();
126 if (xmlFile == null) {
127 throw new ConfigurationException("Didn't find file " + fileName);
128 }
129 List<XmlDocCollection> xmlFiles = new ArrayList<XmlDocCollection>();
130 XmlDocCollection docCollection = getFileXmlDocCollection(xmlFile, "UnitTestTemp");
131 xmlFiles.add(docCollection);
132 KEWServiceLocator.getXmlIngesterService().ingest(xmlFiles);
133 for (Iterator iterator = docCollection.getXmlDocs().iterator(); iterator.hasNext();) {
134 XmlDoc doc = (XmlDoc) iterator.next();
135 if (!doc.isProcessed()) {
136 throw new RuntimeException("Failed to ingest xml doc: " + doc.getName());
137 }
138 }
139 }
140
141 protected FileXmlDocCollection getFileXmlDocCollection(InputStream xmlFile, String tempFileName) throws IOException {
142 if (xmlFile == null) {
143 throw new RuntimeException("Didn't find the xml file " + tempFileName);
144 }
145 File temp = File.createTempFile(tempFileName, ".xml");
146 FileOutputStream fos = new FileOutputStream(temp);
147 int data = -1;
148 while ((data = xmlFile.read()) != -1) {
149 fos.write(data);
150 }
151 fos.close();
152 return new FileXmlDocCollection(temp);
153 }*/
154
155 /**
156 * @see org.kuali.rice.ken.core.BaseLifecycle#stop()
157 */
158 public void stop() throws Exception {
159 GlobalNotificationServiceLocator.destroy();
160 super.stop();
161 }
162 }