1 /*
2 * Copyright 2007 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.rice.ken.core;
17
18 import javax.sql.DataSource;
19
20 import org.apache.log4j.Logger;
21 import org.kuali.rice.core.api.lifecycle.LifecycleBean;
22 import org.kuali.rice.core.api.lifecycle.LifecycleBean;
23 import org.springframework.beans.BeansException;
24 import org.springframework.beans.factory.BeanFactory;
25 import org.springframework.beans.factory.BeanFactoryAware;
26 import org.springframework.beans.factory.BeanInitializationException;
27 import org.springframework.transaction.PlatformTransactionManager;
28 import org.springframework.transaction.support.TransactionTemplate;
29
30 /**
31 * Eager-initializing singleton bean that performs some notification startup operations
32 * @author Kuali Rice Team (rice.collab@kuali.org)
33 */
34 public class NotificationLifeCycle extends LifecycleBean implements BeanFactoryAware {
35 private static final Logger LOG = Logger.getLogger(NotificationLifeCycle.class);
36
37 //private String ojbPlatform;
38 private BeanFactory theFactory;
39 private PlatformTransactionManager txMgr;
40 private DataSource dataSource;
41
42 /**
43 * This method sets the OJB platform.
44 * @param platform
45 */
46 /*
47 public void setOjbPlatform(String platform) {
48 this.ojbPlatform = platform;
49 }*/
50
51 /**
52 * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(org.springframework.beans.factory.BeanFactory)
53 */
54 public void setBeanFactory(BeanFactory theFactory) throws BeansException {
55 this.theFactory = theFactory;
56 }
57
58 public void setTransactionManager(PlatformTransactionManager txMgr) {
59 this.txMgr = txMgr;
60 }
61
62 public void setDataSource(DataSource dataSource) {
63 this.dataSource = dataSource;
64 }
65
66 /**
67 * Helper method for creating a TransactionTemplate initialized to create
68 * a new transaction
69 * @return a TransactionTemplate initialized to create a new transaction
70 */
71 protected TransactionTemplate createNewTransaction() {
72 TransactionTemplate tt = new TransactionTemplate(txMgr);
73 tt.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRES_NEW);
74 return tt;
75 }
76
77 /**
78 * @see org.kuali.rice.ken.core.BaseLifecycle#start()
79 */
80 public void start() throws Exception {
81 /*if (ojbPlatform == null) {
82 throw new BeanInitializationException("No platform was configured, please configure the datasource.ojb.platform property.");
83 }*/
84
85 GlobalNotificationServiceLocator.init(theFactory);
86 /*
87 createNewTransaction().execute(new TransactionCallback() {
88 public Object doInTransaction(TransactionStatus txStatus) {
89 JdbcTemplate t = new JdbcTemplate(dataSource);
90 Boolean dataLoaded = (Boolean) t.execute(new StatementCallback() {
91 public Object doInStatement(Statement stmt) throws SQLException, DataAccessException {
92 ResultSet rs = stmt.executeQuery("select * from APP_META_T where NAME = 'ken.bootstrap.loaded' and VALUE = 'true'");
93 try {
94 return rs.next();
95 } finally {
96 rs.close();
97 }
98 }
99 });
100 if (!dataLoaded.booleanValue()) {
101 loadXmlFile("classpath:data/NotificationData.xml");
102
103 t.execute(new StatementCallback() {
104 public Object doInStatement(Statement stmt) throws SQLException, DataAccessException {
105 ResultSet rs = stmt.executeQuery("update APP_META_T where NAME = 'ken.bootstrap.loaded' and VALUE = 'true'");
106 try {
107 return rs.next();
108 } finally {
109 rs.close();
110 }
111 }
112 });
113 }
114 }
115 });
116 */
117
118 //LOG.info("Setting OJB platform to: " + ojbPlatform);
119 //PersistenceBrokerFactory.defaultPersistenceBroker().serviceConnectionManager().getConnectionDescriptor().setDbms(ojbPlatform);
120 super.start();
121 }
122
123 // yanked from KEWXmlDataLoaderLifecycle
124 /*
125 protected void loadXmlFile(String fileName) throws Exception {
126 Resource resource = new DefaultResourceLoader().getResource(fileName);
127 InputStream xmlFile = resource.getInputStream();
128 if (xmlFile == null) {
129 throw new ConfigurationException("Didn't find file " + fileName);
130 }
131 List<XmlDocCollection> xmlFiles = new ArrayList<XmlDocCollection>();
132 XmlDocCollection docCollection = getFileXmlDocCollection(xmlFile, "UnitTestTemp");
133 xmlFiles.add(docCollection);
134 KEWServiceLocator.getXmlIngesterService().ingest(xmlFiles);
135 for (Iterator iterator = docCollection.getXmlDocs().iterator(); iterator.hasNext();) {
136 XmlDoc doc = (XmlDoc) iterator.next();
137 if (!doc.isProcessed()) {
138 throw new RuntimeException("Failed to ingest xml doc: " + doc.getName());
139 }
140 }
141 }
142
143 protected FileXmlDocCollection getFileXmlDocCollection(InputStream xmlFile, String tempFileName) throws IOException {
144 if (xmlFile == null) {
145 throw new RuntimeException("Didn't find the xml file " + tempFileName);
146 }
147 File temp = File.createTempFile(tempFileName, ".xml");
148 FileOutputStream fos = new FileOutputStream(temp);
149 int data = -1;
150 while ((data = xmlFile.read()) != -1) {
151 fos.write(data);
152 }
153 fos.close();
154 return new FileXmlDocCollection(temp);
155 }*/
156
157 /**
158 * @see org.kuali.rice.ken.core.BaseLifecycle#stop()
159 */
160 public void stop() throws Exception {
161 GlobalNotificationServiceLocator.destroy();
162 super.stop();
163 }
164 }