KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > console > jmsmanager > activemqCF > ActiveMQConnectorHelper


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 package org.apache.geronimo.console.jmsmanager.activemqCF;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.geronimo.common.DeploymentException;
23 import org.apache.geronimo.console.util.ObjectNameConstants;
24 import org.apache.geronimo.console.util.PortletManager;
25 import org.apache.geronimo.kernel.Kernel;
26 import org.apache.geronimo.kernel.KernelRegistry;
27 import org.apache.geronimo.kernel.config.ConfigurationManager;
28 import org.apache.geronimo.kernel.config.ConfigurationUtil;
29 import org.apache.geronimo.kernel.repository.Artifact;
30 import org.apache.geronimo.kernel.repository.ListableRepository;
31
32 import javax.portlet.PortletRequest;
33 import java.io.BufferedWriter JavaDoc;
34 import java.io.File JavaDoc;
35 import java.io.FileOutputStream JavaDoc;
36 import java.io.IOException JavaDoc;
37 import java.io.OutputStreamWriter JavaDoc;
38 import java.io.Writer JavaDoc;
39 import java.net.URISyntaxException JavaDoc;
40 import java.text.MessageFormat JavaDoc;
41 import java.util.ArrayList JavaDoc;
42 import java.util.Iterator JavaDoc;
43 import java.util.List JavaDoc;
44 import java.util.SortedSet JavaDoc;
45
46 public class ActiveMQConnectorHelper {
47     //todo: this class is horrible and needs to be burned!
48
private final static Log log = LogFactory.getLog(ActiveMQConnectorHelper.class);
49
50     private static String JavaDoc MODULE_FILE;
51
52     private final static String JavaDoc ACTIVEMQ_RAR = "repository/activemq/rars/activemq-ra-3.2.1.rar";
53
54     private static final String JavaDoc LINE_SEP = System.getProperty("line.separator");
55
56     private static final String JavaDoc PLAN_TEMPLATE = getPlanTemplate();
57
58     private static final String JavaDoc[] DEPLOYER_ARGS = { File JavaDoc.class.getName(),
59             File JavaDoc.class.getName() };
60
61     private static final String JavaDoc DEPLOY_METHOD = "deploy";
62
63     private static String JavaDoc getPlanTemplate() {
64         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
65         sb.append("<?xml version=\"1.0\"?>\n");
66         sb
67                 .append("<connector xmlns=\"http://geronimo.apache.org/xml/ns/j2ee/connector-1.0\"\n");
68         sb.append(" configId=\"{0}\" parentId=\"{1}\">\n");
69         sb.append(" <resourceadapter>\n");
70         sb.append(" <resourceadapter-instance>\n");
71         sb.append(" <resourceadapter-name>{2}</resourceadapter-name>\n");
72         sb
73                 .append(" <config-property-setting name=\"ServerUrl\">{3}</config-property-setting>\n");
74         sb
75                 .append(" <config-property-setting name=\"UserName\">{4}</config-property-setting>\n");
76         sb
77                 .append(" <config-property-setting name=\"Password\">{5}</config-property-setting>\n");
78         sb
79                 .append(" <workmanager><gbean-link>DefaultWorkManager</gbean-link></workmanager>\n");
80         sb.append(" </resourceadapter-instance>\n");
81         sb.append(" <outbound-resourceadapter>\n");
82         sb.append(" <connection-definition>\n");
83         sb
84                 .append(" <connectionfactory-interface>javax.jms.ConnectionFactory</connectionfactory-interface>\n");
85         sb.append(" <connectiondefinition-instance>\n");
86         sb.append(" <name>{6}</name>\n");
87         sb
88                 .append(" <implemented-interface>javax.jms.QueueConnectionFactory</implemented-interface>\n");
89         sb
90                 .append(" <implemented-interface>javax.jms.TopicConnectionFactory</implemented-interface>\n");
91         sb.append(" <connectionmanager>\n");
92         sb.append(" <xa-transaction>\n");
93         sb.append(" <transaction-caching/>\n");
94         sb.append(" </xa-transaction>\n");
95         sb.append(" <single-pool>\n");
96         sb.append(" <max-size>{7}</max-size>\n");
97         sb
98                 .append(" <blocking-timeout-milliseconds>{8}</blocking-timeout-milliseconds>\n");
99         sb.append(" <match-one/>\n");
100         sb.append(" </single-pool>\n");
101         sb.append(" </connectionmanager>\n");
102         sb.append(" </connectiondefinition-instance>\n");
103         sb.append(" </connection-definition>\n");
104         sb.append(" </outbound-resourceadapter>\n");
105         sb.append(" </resourceadapter>\n");
106         sb.append("</connector>\n");
107
108         return sb.toString();
109     }
110
111     private void savePlan(File JavaDoc f, Object JavaDoc[] args) {
112         MessageFormat JavaDoc mf = new MessageFormat JavaDoc(PLAN_TEMPLATE);
113         String JavaDoc plan = mf.format(args);
114
115         try {
116             f.createNewFile();
117             FileOutputStream JavaDoc fos = new FileOutputStream JavaDoc(f);
118             OutputStreamWriter JavaDoc osw = new OutputStreamWriter JavaDoc(fos);
119             Writer JavaDoc out = new BufferedWriter JavaDoc(osw);
120             out.write(plan);
121             out.flush();
122             out.close();
123             osw.close();
124             fos.close();
125         } catch (Exception JavaDoc e) {
126             log.error("Problem creating the plan file", e);
127         }
128     }
129
130     public void deployPlan(PortletRequest request, Object JavaDoc[] args) {
131         try {
132             File JavaDoc file = File.createTempFile("console-jms-connector-plan-", ".xml");
133             file.deleteOnExit();
134             savePlan(file, args);
135             if(MODULE_FILE == null) {
136                 MODULE_FILE = PortletManager.getCurrentServer(request).getServerInfo().resolvePath(ACTIVEMQ_RAR);
137             }
138             deployPlan(new File JavaDoc(MODULE_FILE), file);
139         } catch (IOException JavaDoc e) {
140             log.error("Unable to write deployment plan", e);
141         }
142     }
143
144     public void deployPlan(File JavaDoc moduleFile, File JavaDoc planFile) {
145         try {
146             Kernel kernel = KernelRegistry.getSingleKernel();
147             List JavaDoc list = (List JavaDoc) kernel.invoke(ObjectNameConstants.DEPLOYER_OBJECT_NAME, DEPLOY_METHOD,
148                     new Object JavaDoc[] {moduleFile, planFile}, DEPLOYER_ARGS);
149             ConfigurationManager configurationManager = ConfigurationUtil
150                     .getConfigurationManager(kernel);
151             for (Iterator JavaDoc iterator = list.iterator(); iterator.hasNext();) {
152                 Artifact configID = Artifact.create((String JavaDoc)iterator.next());
153                 if (!configurationManager.isLoaded(configID)) {
154                     configurationManager.loadConfiguration(configID);
155                 }
156
157                 configurationManager.startConfiguration(configID);
158             }
159         } catch (DeploymentException e) {
160             StringBuffer JavaDoc buf = new StringBuffer JavaDoc(256);
161             Throwable JavaDoc cause = e;
162             while (cause != null) {
163                 buf.append(cause.getMessage());
164                 buf.append(LINE_SEP);
165                 cause = cause.getCause();
166             }
167             log.error("Problem deploying the ActiveMQ connector: " + buf);
168         } catch (URISyntaxException JavaDoc e) {
169             log.error("Newly installed app has invalid config ID", e);
170         } catch (Exception JavaDoc e) {
171             log.error("Problem creating the datasource", e);
172         }
173     }
174
175     public List JavaDoc getDependencies(PortletRequest request) {
176         ListableRepository[] repo = PortletManager.getCurrentServer(request).getRepositories();
177         List JavaDoc dependencies = new ArrayList JavaDoc();
178         for (int i = 0; i < repo.length; i++) {
179             ListableRepository repository = repo[i];
180             SortedSet JavaDoc artifacts = repository.list();
181             for (Iterator JavaDoc iterator = artifacts.iterator(); iterator.hasNext();) {
182                 Artifact artifact = (Artifact) iterator.next();
183                 dependencies.add(artifact.toString());
184             }
185         }
186
187         return dependencies;
188     }
189 }
Popular Tags