001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 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.apache.geronimo.console.configcreator; 018 019 import java.io.ByteArrayOutputStream; 020 import java.io.File; 021 import java.io.IOException; 022 import java.net.URL; 023 import java.util.ArrayList; 024 import java.util.List; 025 import java.util.jar.JarFile; 026 027 import javax.enterprise.deploy.model.DDBean; 028 import javax.enterprise.deploy.model.DDBeanRoot; 029 import javax.enterprise.deploy.model.exceptions.DDBeanCreateException; 030 import javax.enterprise.deploy.shared.factories.DeploymentFactoryManager; 031 import javax.enterprise.deploy.spi.DeploymentConfiguration; 032 import javax.enterprise.deploy.spi.DeploymentManager; 033 import javax.enterprise.deploy.spi.Target; 034 import javax.enterprise.deploy.spi.exceptions.ConfigurationException; 035 import javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException; 036 import javax.enterprise.deploy.spi.exceptions.InvalidModuleException; 037 import javax.enterprise.deploy.spi.factories.DeploymentFactory; 038 import javax.enterprise.deploy.spi.status.ProgressObject; 039 import javax.management.ObjectName; 040 import javax.portlet.PortletException; 041 import javax.portlet.PortletRequest; 042 043 import org.apache.geronimo.common.DeploymentException; 044 import org.apache.geronimo.connector.deployment.AdminObjectRefBuilder.AdminObjectRefProcessor; 045 import org.apache.geronimo.connector.deployment.ResourceRefBuilder.ResourceRefProcessor; 046 import org.apache.geronimo.console.configcreator.AbstractHandler.ReferenceData; 047 import org.apache.geronimo.console.configcreator.AbstractHandler.WARConfigData; 048 import org.apache.geronimo.console.configcreator.JSR77_Util.ReferredData; 049 import org.apache.geronimo.console.util.PortletManager; 050 import org.apache.geronimo.deployment.ConfigurationBuilder; 051 import org.apache.geronimo.deployment.ModuleIDBuilder; 052 import org.apache.geronimo.deployment.plugin.factories.DeploymentFactoryWithKernel; 053 import org.apache.geronimo.deployment.plugin.jmx.JMXDeploymentManager; 054 import org.apache.geronimo.deployment.service.jsr88.EnvironmentData; 055 import org.apache.geronimo.deployment.tools.loader.WebDeployable; 056 import org.apache.geronimo.j2ee.ApplicationInfo; 057 import org.apache.geronimo.j2ee.deployment.Module; 058 import org.apache.geronimo.j2ee.deployment.annotation.AnnotatedApp; 059 import org.apache.geronimo.j2ee.deployment.annotation.AnnotatedWebApp; 060 import org.apache.geronimo.j2ee.deployment.annotation.EJBAnnotationHelper; 061 import org.apache.geronimo.j2ee.deployment.annotation.HandlerChainAnnotationHelper; 062 import org.apache.geronimo.j2ee.deployment.annotation.PersistenceContextAnnotationHelper; 063 import org.apache.geronimo.j2ee.deployment.annotation.PersistenceUnitAnnotationHelper; 064 import org.apache.geronimo.j2ee.deployment.annotation.ResourceAnnotationHelper; 065 import org.apache.geronimo.j2ee.deployment.annotation.SecurityAnnotationHelper; 066 import org.apache.geronimo.j2ee.deployment.annotation.WebServiceRefAnnotationHelper; 067 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 068 import org.apache.geronimo.kernel.Kernel; 069 import org.apache.geronimo.kernel.config.ConfigurationManager; 070 import org.apache.geronimo.kernel.repository.Artifact; 071 import org.apache.geronimo.naming.deployment.EnvironmentEntryBuilder.EnvEntryRefProcessor; 072 import org.apache.geronimo.naming.deployment.SwitchingServiceRefBuilder.ServiceRefProcessor; 073 import org.apache.geronimo.naming.deployment.jsr88.EjbLocalRef; 074 import org.apache.geronimo.naming.deployment.jsr88.EjbRef; 075 import org.apache.geronimo.naming.deployment.jsr88.MessageDestination; 076 import org.apache.geronimo.naming.deployment.jsr88.Pattern; 077 import org.apache.geronimo.naming.deployment.jsr88.ResourceEnvRef; 078 import org.apache.geronimo.naming.deployment.jsr88.ResourceRef; 079 import org.apache.geronimo.web.deployment.WebAppDConfigBean; 080 import org.apache.geronimo.web.deployment.WebAppDConfigRoot; 081 import org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder; 082 import org.apache.geronimo.xbeans.geronimo.naming.GerServiceRefType; 083 import org.apache.geronimo.xbeans.geronimo.security.GerRoleType; 084 import org.apache.geronimo.xbeans.geronimo.security.GerSecurityType; 085 import org.apache.geronimo.xbeans.javaee.EjbLocalRefType; 086 import org.apache.geronimo.xbeans.javaee.EjbRefType; 087 import org.apache.geronimo.xbeans.javaee.MessageDestinationType; 088 import org.apache.geronimo.xbeans.javaee.ResourceEnvRefType; 089 import org.apache.geronimo.xbeans.javaee.ResourceRefType; 090 import org.apache.geronimo.xbeans.javaee.SecurityRoleType; 091 import org.apache.geronimo.xbeans.javaee.ServiceRefType; 092 import org.apache.geronimo.xbeans.javaee.WebAppType; 093 import org.apache.xbean.finder.ClassFinder; 094 095 /** 096 * Util class for JSR-88 related functions 097 * 098 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 099 */ 100 public class JSR88_Util { 101 102 private static void parseAnnotations(AnnotatedApp annotatedApp, ClassFinder classFinder) throws Exception { 103 ResourceAnnotationHelper.processAnnotations(annotatedApp, classFinder, EnvEntryRefProcessor.INSTANCE); 104 WebServiceRefAnnotationHelper.processAnnotations(annotatedApp, classFinder); 105 HandlerChainAnnotationHelper.processAnnotations(annotatedApp, classFinder); 106 ResourceAnnotationHelper.processAnnotations(annotatedApp, classFinder, ServiceRefProcessor.INSTANCE); 107 ResourceAnnotationHelper.processAnnotations(annotatedApp, classFinder, AdminObjectRefProcessor.INSTANCE); 108 ResourceAnnotationHelper.processAnnotations(annotatedApp, classFinder, ResourceRefProcessor.INSTANCE); 109 PersistenceContextAnnotationHelper.processAnnotations(annotatedApp, classFinder); 110 PersistenceUnitAnnotationHelper.processAnnotations(annotatedApp, classFinder); 111 EJBAnnotationHelper.processAnnotations(annotatedApp, classFinder); 112 if (annotatedApp instanceof AnnotatedWebApp) { 113 SecurityAnnotationHelper.processAnnotations(((AnnotatedWebApp) annotatedApp).getWebApp(), classFinder); 114 } 115 } 116 117 private static ConfigurationBuilder getConfigurationBuilder(PortletRequest request) { 118 Object[] builders = PortletManager.getGBeansImplementing(request, ConfigurationBuilder.class); 119 ConfigurationBuilder configurationBuilder = null; 120 for (int i = 0; i < builders.length; i++) { 121 ObjectName objectName = PortletManager.getNameFor(request, builders[i]).getObjectName(); 122 if ("EARBuilder".equalsIgnoreCase(objectName.getKeyProperty(NameFactory.J2EE_NAME))) { 123 configurationBuilder = (ConfigurationBuilder) builders[i]; 124 break; 125 } 126 } 127 return configurationBuilder; 128 } 129 130 private static ApplicationInfo createApplicationInfo(PortletRequest request, URL moduleUrl) throws Exception { 131 ConfigurationBuilder configurationBuilderBuilder = getConfigurationBuilder(request); 132 File moduleFile = new File(moduleUrl.getFile()); 133 JarFile moduleJar = new JarFile(moduleFile); 134 ApplicationInfo applicationInfo = (ApplicationInfo) configurationBuilderBuilder.getDeploymentPlan(null, moduleJar, 135 new ModuleIDBuilder()); 136 return applicationInfo; 137 } 138 139 public static void parseWarReferences(PortletRequest request, WARConfigData data, URL warUrl) 140 throws Exception { 141 WebDeployable webDeployable = new WebDeployable(warUrl); 142 ClassLoader classLoader = webDeployable.getModuleLoader(); 143 144 ApplicationInfo applicationInfo = createApplicationInfo(request, warUrl); 145 Module module = (Module) (applicationInfo.getModules().toArray()[0]); 146 WebAppType webApp = (WebAppType) module.getSpecDD(); 147 148 ClassFinder classFinder = null; 149 try { 150 classFinder = AbstractWebModuleBuilder.createWebAppClassFinder(webApp, classLoader); 151 // classFinder = new ClassFinder(classLoader); 152 } catch (DeploymentException e1) { 153 // Some of the class types referred in the WAR cannot be resolved. 154 // A typical case would be references to EJBs already deployed into the system, and 155 // hence not packaged inside WEB-INF/lib directory of WAR. 156 // try adding all EJBs deployed in the system as parents of this WAR, and 157 // see if referred classes can now be successfully resolved 158 159 classLoader = new WebDeployable(warUrl, getEjbClassLoaders(request)).getModuleLoader(); 160 try { 161 classFinder = AbstractWebModuleBuilder.createWebAppClassFinder(webApp, classLoader); 162 } catch (DeploymentException e2) { 163 throw e2; 164 } 165 } 166 AnnotatedApp annotatedApp = module.getAnnotatedApp(); 167 parseAnnotations(annotatedApp, classFinder); 168 169 //DDBeanRoot ddBeanRoot = webDeployable.getDDBeanRoot(); 170 //DDBean ddBean = ddBeanRoot.getChildBean("web-app")[0]; 171 172 EjbRefType[] ejbRefs = annotatedApp.getEjbRefArray(); 173 for (int i = 0; i < ejbRefs.length; i++) { 174 String refName = ejbRefs[i].getEjbRefName().getStringValue(); 175 data.getEjbRefs().add(new ReferenceData(refName)); 176 } 177 /*DDBean[] ddBeans = ddBean.getChildBean("ejb-ref"); 178 for (int i = 0; ddBeans != null && i < ddBeans.length; i++) { 179 String refName = ddBeans[i].getChildBean("ejb-ref-name")[0].getText(); 180 data.getEjbRefs().add(new ReferenceData(refName)); 181 }*/ 182 183 EjbLocalRefType[] ejbLocalRefs = annotatedApp.getEjbLocalRefArray(); 184 for (int i = 0; i < ejbLocalRefs.length; i++) { 185 String refName = ejbLocalRefs[i].getEjbRefName().getStringValue(); 186 data.getEjbLocalRefs().add(new ReferenceData(refName)); 187 } 188 /*ddBeans = ddBean.getChildBean("ejb-local-ref"); 189 for (int i = 0; ddBeans != null && i < ddBeans.length; i++) { 190 String refName = ddBeans[i].getChildBean("ejb-ref-name")[0].getText(); 191 data.getEjbLocalRefs().add(new ReferenceData(refName)); 192 }*/ 193 194 ResourceRefType[] resourceRefs = annotatedApp.getResourceRefArray(); 195 for(int i = 0; i < resourceRefs.length; i++) { 196 String refName = resourceRefs[i].getResRefName().getStringValue(); 197 String refType = resourceRefs[i].getResType().getStringValue(); 198 if ("javax.sql.DataSource".equalsIgnoreCase(refType)) { 199 data.getJdbcPoolRefs().add(new ReferenceData(refName)); 200 } else if ("javax.jms.ConnectionFactory".equalsIgnoreCase(refType) 201 || "javax.jms.QueueConnectionFactory".equalsIgnoreCase(refType) 202 || "javax.jms.TopicConnectionFactory".equalsIgnoreCase(refType)) { 203 data.getJmsConnectionFactoryRefs().add(new ReferenceData(refName)); 204 } else if ("javax.mail.Session".equalsIgnoreCase(refType)) { 205 data.getJavaMailSessionRefs().add(new ReferenceData(refName)); 206 } 207 } 208 /*ddBeans = ddBean.getChildBean("resource-ref"); 209 for (int i = 0; ddBeans != null && i < ddBeans.length; i++) { 210 String refName = ddBeans[i].getChildBean("res-ref-name")[0].getText(); 211 String refType = ddBeans[i].getChildBean("res-type")[0].getText(); 212 if ("javax.sql.DataSource".equalsIgnoreCase(refType)) { 213 data.getJdbcPoolRefs().add(new ReferenceData(refName)); 214 } else if ("javax.jms.ConnectionFactory".equalsIgnoreCase(refType) 215 || "javax.jms.QueueConnectionFactory".equalsIgnoreCase(refType) 216 || "javax.jms.TopicConnectionFactory".equalsIgnoreCase(refType)) { 217 data.getJmsConnectionFactoryRefs().add(new ReferenceData(refName)); 218 } 219 }*/ 220 221 ServiceRefType[] serviceRefs = annotatedApp.getServiceRefArray(); 222 for(int i = 0; i < serviceRefs.length; i++) { 223 String refName = serviceRefs[i].getServiceRefName().getStringValue(); 224 GerServiceRefType serviceRef = GerServiceRefType.Factory.newInstance(); 225 serviceRef.setServiceRefName(refName); 226 data.getWebServiceRefs().add(serviceRef); 227 } 228 229 ResourceEnvRefType[] resourceEnvRefs = annotatedApp.getResourceEnvRefArray(); 230 for(int i = 0; i < resourceEnvRefs.length; i++) { 231 String refName = resourceEnvRefs[i].getResourceEnvRefName().getStringValue(); 232 ReferenceData refData = new ReferenceData(refName); 233 refData.setRefLink(refName); 234 data.getJmsDestinationRefs().add(refData); 235 } 236 if(annotatedApp instanceof AnnotatedWebApp) { 237 WebAppType webApp2 = ((AnnotatedWebApp)annotatedApp).getWebApp(); 238 MessageDestinationType[] messageDestinations = webApp2.getMessageDestinationArray(); 239 for(int i = 0; i < messageDestinations.length; i++) { 240 String refName = messageDestinations[i].getMessageDestinationName().getStringValue(); 241 ReferenceData refData = new ReferenceData(refName); 242 refData.setRefLink(refName); 243 data.getMessageDestinations().add(refData); 244 } 245 246 SecurityRoleType[] securityRoles = webApp2.getSecurityRoleArray(); 247 if (securityRoles.length > 0) { 248 data.setSecurity(GerSecurityType.Factory.newInstance()); 249 data.getSecurity().addNewRoleMappings(); 250 } 251 for (int i = 0; i < securityRoles.length; i++) { 252 String roleName = securityRoles[i].getRoleName().getStringValue(); 253 GerRoleType role = data.getSecurity().getRoleMappings().addNewRole(); 254 role.setRoleName(roleName); 255 } 256 } 257 /*ddBeans = ddBean.getChildBean("message-destination"); 258 for (int i = 0; ddBeans != null && i < ddBeans.length; i++) { 259 String refName = ddBeans[i].getChildBean("message-destination-name")[0].getText(); 260 ReferenceData refData = new ReferenceData(refName); 261 refData.setRefLink(refName); 262 data.getJmsDestinationRefs().add(refData); 263 }*/ 264 } 265 266 private static List getEjbClassLoaders(PortletRequest request) { 267 List deployedEjbs = JSR77_Util.getDeployedEJBs(request); 268 List configurations = new ArrayList(); 269 for (int i = 0; i < deployedEjbs.size(); i++) { 270 String ejbPatternName = ((ReferredData) deployedEjbs.get(i)).getPatternName(); 271 configurations.add(getDependencyString(ejbPatternName)); 272 } 273 return getConfigClassLoaders(configurations); 274 } 275 276 private static List getConfigClassLoaders(List configurationNames) { 277 List classLoaders = new ArrayList(); 278 ConfigurationManager configurationManager = PortletManager.getConfigurationManager(); 279 for (int i = 0; i < configurationNames.size(); i++) { 280 Artifact configurationId = Artifact.create((String) configurationNames.get(i)); 281 classLoaders.add(configurationManager.getConfiguration(configurationId).getConfigurationClassLoader()); 282 } 283 return classLoaders; 284 } 285 286 public static String getDependencyString(String patternString) { 287 String[] elements = patternString.split("/", 6); 288 return elements[0] + "/" + elements[1] + "/" + elements[2] + "/" + elements[3]; 289 } 290 291 public static String createDeploymentPlan(PortletRequest request, WARConfigData data, URL WarUrl) 292 throws IOException, DDBeanCreateException, InvalidModuleException, ConfigurationException, DeploymentManagerCreationException { 293 WebDeployable webDeployable = new WebDeployable(WarUrl); 294 DDBeanRoot ddBeanRoot = webDeployable.getDDBeanRoot(); 295 DDBean ddBean = ddBeanRoot.getChildBean("web-app")[0]; 296 297 Kernel kernel = PortletManager.getKernel(); 298 DeploymentFactory factory = new DeploymentFactoryWithKernel(kernel); 299 DeploymentManager deploymentManager = factory.getDeploymentManager("deployer:geronimo:inVM", null, null); 300 DeploymentConfiguration deploymentConfiguration = deploymentManager.createConfiguration(webDeployable); 301 WebAppDConfigRoot configRoot = (WebAppDConfigRoot) deploymentConfiguration.getDConfigBeanRoot(ddBeanRoot); 302 WebAppDConfigBean webApp = (WebAppDConfigBean) configRoot.getDConfigBean(ddBean); 303 304 webApp.setContextRoot(data.getContextRoot()); 305 306 EnvironmentData environment = new EnvironmentData(); 307 webApp.setEnvironment(environment); 308 org.apache.geronimo.deployment.service.jsr88.Artifact configId = new org.apache.geronimo.deployment.service.jsr88.Artifact(); 309 environment.setConfigId(configId); 310 configId.setGroupId(data.getGroupId()); 311 configId.setArtifactId(data.getArtifactId()); 312 configId.setVersion(data.getVersion()); 313 configId.setType(data.getType()); 314 int numDependencies = data.getDependencies().size(); 315 if (numDependencies > 0) { 316 org.apache.geronimo.deployment.service.jsr88.Artifact[] dependencies = new org.apache.geronimo.deployment.service.jsr88.Artifact[numDependencies]; 317 for (int i = 0; i < numDependencies; i++) { 318 dependencies[i] = new org.apache.geronimo.deployment.service.jsr88.Artifact(); 319 } 320 environment.setDependencies(dependencies); 321 for (int i = 0; i < numDependencies; i++) { 322 Artifact artifact = Artifact.create(((String) data.getDependencies().get(i)).trim()); 323 org.apache.geronimo.deployment.service.jsr88.Artifact dep = dependencies[i]; 324 dep.setArtifactId(artifact.getArtifactId()); 325 if (artifact.getGroupId() != null) { 326 dep.setGroupId(artifact.getGroupId()); 327 } 328 if (artifact.getType() != null) { 329 dep.setType(artifact.getType()); 330 } 331 if (artifact.getVersion() != null) { 332 dep.setVersion(artifact.getVersion().toString()); 333 } 334 } 335 } 336 String hiddenClassesString = data.getHiddenClasses(); 337 if (hiddenClassesString != null && hiddenClassesString.length() > 0) { 338 String[] hiddenClasses = getNonEmptyStrings(hiddenClassesString.split(";")); 339 if (hiddenClasses.length > 0) { 340 environment.setHiddenClasses(hiddenClasses); 341 } 342 } 343 String nonOverridableClassesString = data.getNonOverridableClasses(); 344 if (nonOverridableClassesString != null && nonOverridableClassesString.length() > 0) { 345 String[] nonOverridableClasses = getNonEmptyStrings(nonOverridableClassesString.split(";")); 346 if (nonOverridableClasses.length > 0) { 347 environment.setNonOverridableClasses(nonOverridableClasses); 348 } 349 } 350 if (data.isInverseClassLoading()) { 351 environment.setInverseClassLoading(true); 352 } 353 354 int numEjbRefs = data.getEjbRefs().size(); 355 if (numEjbRefs > 0) { 356 EjbRef[] ejbRefs = new EjbRef[numEjbRefs]; 357 for (int i = 0; i < numEjbRefs; i++) { 358 ejbRefs[i] = new EjbRef(); 359 } 360 webApp.setEjbRefs(ejbRefs); 361 for (int i = 0; i < numEjbRefs; i++) { 362 EjbRef ejbRef = ejbRefs[i]; 363 ReferenceData referenceData = (ReferenceData) data.getEjbRefs().get(i); 364 ejbRef.setRefName(referenceData.getRefName()); 365 ejbRef.setPattern(createPattern(referenceData.getRefLink())); 366 } 367 } 368 369 int numEjbLocalRefs = data.getEjbLocalRefs().size(); 370 if (numEjbLocalRefs > 0) { 371 EjbLocalRef[] ejbLocalRefs = new EjbLocalRef[numEjbLocalRefs]; 372 for (int i = 0; i < numEjbLocalRefs; i++) { 373 ejbLocalRefs[i] = new EjbLocalRef(); 374 } 375 webApp.setEjbLocalRefs(ejbLocalRefs); 376 for (int i = 0; i < numEjbLocalRefs; i++) { 377 EjbLocalRef ejbLocalRef = ejbLocalRefs[i]; 378 ReferenceData referenceData = (ReferenceData) data.getEjbLocalRefs().get(i); 379 ejbLocalRef.setRefName(referenceData.getRefName()); 380 ejbLocalRef.setPattern(createPattern(referenceData.getRefLink())); 381 } 382 } 383 384 int numResourceRefs = data.getJdbcPoolRefs().size() + data.getJmsConnectionFactoryRefs().size() 385 + data.getJavaMailSessionRefs().size(); 386 if (numResourceRefs > 0) { 387 ResourceRef[] resourceRefs = new ResourceRef[numResourceRefs]; 388 for (int i = 0; i < numResourceRefs; i++) { 389 resourceRefs[i] = new ResourceRef(); 390 } 391 webApp.setResourceRefs(resourceRefs); 392 int i = 0; 393 for (int l = 0; l < data.getJdbcPoolRefs().size(); l++, i++) { 394 ResourceRef resourceRef = resourceRefs[i]; 395 ReferenceData referenceData = (ReferenceData) data.getJdbcPoolRefs().get(l); 396 resourceRef.setRefName(referenceData.getRefName()); 397 resourceRef.setPattern(createPattern(referenceData.getRefLink())); 398 } 399 for (int m = 0; m < data.getJmsConnectionFactoryRefs().size(); m++, i++) { 400 ResourceRef resourceRef = resourceRefs[i]; 401 ReferenceData referenceData = (ReferenceData) data.getJmsConnectionFactoryRefs().get(m); 402 resourceRef.setRefName(referenceData.getRefName()); 403 resourceRef.setPattern(createPattern(referenceData.getRefLink())); 404 } 405 for (int n = 0; n < data.getJavaMailSessionRefs().size(); n++, i++) { 406 ResourceRef resourceRef = resourceRefs[i]; 407 ReferenceData referenceData = (ReferenceData) data.getJavaMailSessionRefs().get(n); 408 resourceRef.setRefName(referenceData.getRefName()); 409 resourceRef.setPattern(createPattern(referenceData.getRefLink())); 410 } 411 } 412 413 int numMessageDestinations = data.getMessageDestinations().size(); 414 if (numMessageDestinations > 0) { 415 MessageDestination[] messageDestinations = new MessageDestination[numMessageDestinations]; 416 for (int i = 0; i < numMessageDestinations; i++) { 417 messageDestinations[i] = new MessageDestination(); 418 } 419 webApp.setMessageDestinations(messageDestinations); 420 for (int i = 0; i < numMessageDestinations; i++) { 421 MessageDestination messageDestination = messageDestinations[i]; 422 ReferenceData referenceData = (ReferenceData) data.getMessageDestinations().get(i); 423 messageDestination.setMessageDestinationName(referenceData.getRefName()); 424 // messageDestination.setPattern(createPattern(referenceData.getRefLink())); 425 messageDestination.setAdminObjectLink(createPattern(referenceData.getRefLink()).getName()); 426 } 427 } 428 429 int numResourceEnvRefs = data.getJmsDestinationRefs().size(); 430 if (numResourceEnvRefs > 0) { 431 ResourceEnvRef[] resourceEnvRefs = new ResourceEnvRef[numResourceEnvRefs]; 432 for (int i = 0; i < numResourceEnvRefs; i++) { 433 resourceEnvRefs[i] = new ResourceEnvRef(); 434 } 435 webApp.setResourceEnvRefs(resourceEnvRefs); 436 for (int i = 0; i < numResourceEnvRefs; i++) { 437 ResourceEnvRef resourceEnvRef = resourceEnvRefs[i]; 438 ReferenceData referenceData = (ReferenceData) data.getJmsDestinationRefs().get(i); 439 resourceEnvRef.setRefName(referenceData.getRefName()); 440 resourceEnvRef.setPattern(createPattern(referenceData.getRefLink())); 441 // resourceEnvRef.setAdminObjectLink(createPattern(referenceData.getRefLink()).getName()); 442 } 443 } 444 445 int numWebServiceRefs = data.getWebServiceRefs().size(); 446 if (numWebServiceRefs > 0) { 447 webApp.setServiceRefs(data.getWebServiceRefs().toArray(new GerServiceRefType[numWebServiceRefs])); 448 } 449 450 if (data.getSecurity() != null) { 451 webApp.setSecurityRealmName(data.getSecurityRealmName()); 452 webApp.setSecurity(data.getSecurity()); 453 } 454 455 ByteArrayOutputStream out = new ByteArrayOutputStream(); 456 deploymentConfiguration.save(out); 457 out.close(); 458 return new String(out.toByteArray(), "US-ASCII"); 459 } 460 461 private static Pattern createPattern(String patternString) { 462 Pattern pattern = new Pattern(); 463 String[] elements = patternString.split("/", 6); 464 pattern.setGroupId(elements[0]); 465 pattern.setArtifactId(elements[1]); 466 pattern.setVersion(elements[2]); 467 pattern.setType(elements[3]); 468 pattern.setModule(elements[4]); 469 pattern.setName(elements[5]); 470 return pattern; 471 } 472 473 private static String[] getNonEmptyStrings(String[] strings) { 474 ArrayList list = new ArrayList(); 475 for (int i = 0; i < strings.length; i++) { 476 if (strings[i].trim().length() > 0) 477 list.add(strings[i].trim()); 478 } 479 return (String[]) list.toArray(new String[list.size()]); 480 } 481 482 public static String[] deploy(PortletRequest actionRequest, File moduleFile, File planFile) 483 throws PortletException { 484 // TODO this is a duplicate of the code from 485 // org.apache.geronimo.console.configmanager.DeploymentPortlet.processAction() 486 // TODO need to eliminate this duplicate code 487 DeploymentFactoryManager dfm = DeploymentFactoryManager.getInstance(); 488 String[] statusMsgs = new String[2]; 489 try { 490 DeploymentManager mgr = dfm.getDeploymentManager("deployer:geronimo:inVM", null, null); 491 try { 492 if (mgr instanceof JMXDeploymentManager) { 493 ((JMXDeploymentManager) mgr).setLogConfiguration(false, true); 494 } 495 496 Target[] targets = mgr.getTargets(); 497 if (null == targets) { 498 throw new IllegalStateException("No target to distribute to"); 499 } 500 targets = new Target[] {targets[0]}; 501 502 ProgressObject progress = mgr.distribute(targets, moduleFile, planFile); 503 while (progress.getDeploymentStatus().isRunning()) { 504 Thread.sleep(100); 505 } 506 507 String abbrStatusMessage; 508 String fullStatusMessage = null; 509 if (progress.getDeploymentStatus().isCompleted()) { 510 abbrStatusMessage = "The application was successfully deployed.<br/>"; 511 // start installed app/s 512 progress = mgr.start(progress.getResultTargetModuleIDs()); 513 while (progress.getDeploymentStatus().isRunning()) { 514 Thread.sleep(100); 515 } 516 abbrStatusMessage += "The application was successfully started"; 517 } else { 518 fullStatusMessage = progress.getDeploymentStatus().getMessage(); 519 // for the abbreviated status message clip off everything 520 // after the first line, which in most cases means the gnarly stacktrace 521 abbrStatusMessage = "Deployment failed:<br/>" 522 + fullStatusMessage.substring(0, fullStatusMessage.indexOf('\n')); 523 } 524 statusMsgs[0] = abbrStatusMessage; 525 statusMsgs[1] = fullStatusMessage; 526 } finally { 527 mgr.release(); 528 } 529 } catch (Exception e) { 530 throw new PortletException(e); 531 } 532 return statusMsgs; 533 } 534 }