1 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 ; 34 import java.io.File ; 35 import java.io.FileOutputStream ; 36 import java.io.IOException ; 37 import java.io.OutputStreamWriter ; 38 import java.io.Writer ; 39 import java.net.URISyntaxException ; 40 import java.text.MessageFormat ; 41 import java.util.ArrayList ; 42 import java.util.Iterator ; 43 import java.util.List ; 44 import java.util.SortedSet ; 45 46 public class ActiveMQConnectorHelper { 47 private final static Log log = LogFactory.getLog(ActiveMQConnectorHelper.class); 49 50 private static String MODULE_FILE; 51 52 private final static String ACTIVEMQ_RAR = "repository/activemq/rars/activemq-ra-3.2.1.rar"; 53 54 private static final String LINE_SEP = System.getProperty("line.separator"); 55 56 private static final String PLAN_TEMPLATE = getPlanTemplate(); 57 58 private static final String [] DEPLOYER_ARGS = { File .class.getName(), 59 File .class.getName() }; 60 61 private static final String DEPLOY_METHOD = "deploy"; 62 63 private static String getPlanTemplate() { 64 StringBuffer sb = new StringBuffer (); 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 f, Object [] args) { 112 MessageFormat mf = new MessageFormat (PLAN_TEMPLATE); 113 String plan = mf.format(args); 114 115 try { 116 f.createNewFile(); 117 FileOutputStream fos = new FileOutputStream (f); 118 OutputStreamWriter osw = new OutputStreamWriter (fos); 119 Writer out = new BufferedWriter (osw); 120 out.write(plan); 121 out.flush(); 122 out.close(); 123 osw.close(); 124 fos.close(); 125 } catch (Exception e) { 126 log.error("Problem creating the plan file", e); 127 } 128 } 129 130 public void deployPlan(PortletRequest request, Object [] args) { 131 try { 132 File 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 (MODULE_FILE), file); 139 } catch (IOException e) { 140 log.error("Unable to write deployment plan", e); 141 } 142 } 143 144 public void deployPlan(File moduleFile, File planFile) { 145 try { 146 Kernel kernel = KernelRegistry.getSingleKernel(); 147 List list = (List ) kernel.invoke(ObjectNameConstants.DEPLOYER_OBJECT_NAME, DEPLOY_METHOD, 148 new Object [] {moduleFile, planFile}, DEPLOYER_ARGS); 149 ConfigurationManager configurationManager = ConfigurationUtil 150 .getConfigurationManager(kernel); 151 for (Iterator iterator = list.iterator(); iterator.hasNext();) { 152 Artifact configID = Artifact.create((String )iterator.next()); 153 if (!configurationManager.isLoaded(configID)) { 154 configurationManager.loadConfiguration(configID); 155 } 156 157 configurationManager.startConfiguration(configID); 158 } 159 } catch (DeploymentException e) { 160 StringBuffer buf = new StringBuffer (256); 161 Throwable 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 e) { 169 log.error("Newly installed app has invalid config ID", e); 170 } catch (Exception e) { 171 log.error("Problem creating the datasource", e); 172 } 173 } 174 175 public List getDependencies(PortletRequest request) { 176 ListableRepository[] repo = PortletManager.getCurrentServer(request).getRepositories(); 177 List dependencies = new ArrayList (); 178 for (int i = 0; i < repo.length; i++) { 179 ListableRepository repository = repo[i]; 180 SortedSet artifacts = repository.list(); 181 for (Iterator 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 |