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: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 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 server.closeConnection(); 086 087 log.info("Geronimo Home: " + geronimoHomeStr); 088 089 if (geronimoHomeStr == null) { 090 throw new MojoExecutionException("Unable to determine Geronimo installation directory"); 091 } 092 093 File geronimoHome = new File(geronimoHomeStr); 094 095 if (!geronimoHome.exists()) { 096 throw new MojoExecutionException("Geronimo installation directory does not exist: " + geronimoHomeStr); 097 } 098 099 log.info("Starting Geronimo client..."); 100 101 Java java = (Java)createTask("java"); 102 java.setJar(new File(geronimoHome, "bin/client.jar")); 103 java.setDir(geronimoHome); 104 java.setFailonerror(true); 105 java.setFork(true); 106 107 if (javaVirtualMachine != null) { 108 if (!javaVirtualMachine.exists()) { 109 throw new MojoExecutionException("Java virtual machine is not valid: " + javaVirtualMachine); 110 } 111 112 log.info("Using Java virtual machine: " + javaVirtualMachine); 113 java.setJvm(javaVirtualMachine.getCanonicalPath()); 114 } 115 116 if (timeout > 0) { 117 java.setTimeout(new Long(timeout * 1000)); 118 } 119 120 if (maximumMemory != null) { 121 java.setMaxmemory(maximumMemory); 122 } 123 124 // Set the properties which we pass to the JVM from the startup script 125 setSystemProperty(java, "org.apache.geronimo.base.dir", geronimoHome); 126 setSystemProperty(java, "java.io.tmpdir", "var/temp"); 127 setSystemProperty(java, "java.endorsed.dirs", prefixSystemPath("java.endorsed.dirs", new File(geronimoHome, "lib/endorsed"))); 128 setSystemProperty(java, "java.ext.dirs", prefixSystemPath("java.ext.dirs", new File(geronimoHome, "lib/ext"))); 129 130 java.createArg().setValue(moduleId); 131 132 for (int i=0;arg != null && i<arg.length;i++) { 133 java.createArg().setValue(arg[i]); 134 } 135 136 if (logOutput) { 137 File file = getLogFile(); 138 FileUtils.forceMkdir(file.getParentFile()); 139 140 log.info("Redirecting output to: " + file); 141 142 java.setOutput(file); 143 } 144 145 java.execute(); 146 } 147 148 private String prefixSystemPath(final String name, final File file) { 149 assert name != null; 150 assert file != null; 151 152 String dirs = file.getPath(); 153 String prop = System.getProperty(name, ""); 154 if (prop.length() > 0) { 155 dirs += File.pathSeparator; 156 dirs += prop; 157 } 158 return dirs; 159 } 160 161 protected String getFullClassName() { 162 return this.getClass().getName(); 163 } 164 }