001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 package org.apache.geronimo.mavenplugins.geronimo.server; 021 022 import java.io.File; 023 024 import org.apache.tools.ant.taskdefs.Java; 025 026 import org.apache.maven.plugin.MojoExecutionException; 027 028 import org.apache.geronimo.mavenplugins.geronimo.ServerProxy; 029 import org.apache.geronimo.mavenplugins.geronimo.reporting.ReportingMojoSupport; 030 031 import org.codehaus.plexus.util.FileUtils; 032 033 /** 034 * Execute application client. 035 * 036 * @goal run-client 037 * 038 * @version $Rev: 547378 $ $Date: 2007-06-14 15:44:10 -0400 (Thu, 14 Jun 2007) $ 039 */ 040 public class RunClientMojo extends ReportingMojoSupport 041 { 042 /** 043 * The id of the client module to be executed 044 * 045 * @parameter expression="${moduleId} 046 * @required 047 */ 048 protected String moduleId = null; 049 050 /** 051 * Set the maximum memory for the forked JVM. 052 * 053 * @parameter expression="${maximumMemory}" 054 */ 055 private String maximumMemory = null; 056 057 /** 058 * The location of the Java Virtual Machine executable to launch the client with. 059 * 060 * @paramter 061 */ 062 private File javaVirtualMachine; 063 064 /** 065 * Time in seconds to wait before terminating the forked JVM. 066 * 067 * @parameter expression="${timeout}" default-value="-1" 068 */ 069 private int timeout = -1; 070 071 /** 072 * The arguments 073 * 074 * @parameter expression="${arg} 075 * @optional 076 */ 077 protected String[] arg = null; 078 079 protected void doExecute() throws Exception { 080 ServerProxy server = 081 new ServerProxy(hostname, port, username, password); 082 083 String geronimoHomeStr = server.getGeronimoHome(); 084 085 log.info("Geronimo Home: " + geronimoHomeStr); 086 087 if (geronimoHomeStr == null) { 088 throw new MojoExecutionException("Unable to determine Geronimo installation directory"); 089 } 090 091 File geronimoHome = new File(geronimoHomeStr); 092 093 if (!geronimoHome.exists()) { 094 throw new MojoExecutionException("Geronimo installation directory does not exist: " + geronimoHomeStr); 095 } 096 097 log.info("Starting Geronimo client..."); 098 099 Java java = (Java)createTask("java"); 100 java.setJar(new File(geronimoHome, "bin/client.jar")); 101 java.setDir(geronimoHome); 102 java.setFailonerror(true); 103 java.setFork(true); 104 105 if (javaVirtualMachine != null) { 106 if (!javaVirtualMachine.exists()) { 107 throw new MojoExecutionException("Java virtual machine is not valid: " + javaVirtualMachine); 108 } 109 110 log.info("Using Java virtual machine: " + javaVirtualMachine); 111 java.setJvm(javaVirtualMachine.getCanonicalPath()); 112 } 113 114 if (timeout > 0) { 115 java.setTimeout(new Long(timeout * 1000)); 116 } 117 118 if (maximumMemory != null) { 119 java.setMaxmemory(maximumMemory); 120 } 121 122 // Set the properties which we pass to the JVM from the startup script 123 setSystemProperty(java, "org.apache.geronimo.base.dir", geronimoHome); 124 setSystemProperty(java, "java.io.tmpdir", "var/temp"); 125 setSystemProperty(java, "java.endorsed.dirs", prefixSystemPath("java.endorsed.dirs", new File(geronimoHome, "lib/endorsed"))); 126 setSystemProperty(java, "java.ext.dirs", prefixSystemPath("java.ext.dirs", new File(geronimoHome, "lib/ext"))); 127 128 java.createArg().setValue(moduleId); 129 130 for (int i=0;arg != null && i<arg.length;i++) { 131 java.createArg().setValue(arg[i]); 132 } 133 134 if (logOutput) { 135 File file = getLogFile(); 136 FileUtils.forceMkdir(file.getParentFile()); 137 138 log.info("Redirecting output to: " + file); 139 140 java.setOutput(file); 141 } 142 143 java.execute(); 144 } 145 146 private String prefixSystemPath(final String name, final File file) { 147 assert name != null; 148 assert file != null; 149 150 String dirs = file.getPath(); 151 String prop = System.getProperty(name, ""); 152 if (prop.length() > 0) { 153 dirs += File.pathSeparator; 154 dirs += prop; 155 } 156 return dirs; 157 } 158 159 protected String getFullClassName() { 160 return this.getClass().getName(); 161 } 162 }