| 1 5 package com.tc.test.server.appserver.cargo; 6 7 import org.codehaus.cargo.container.ContainerException; 8 import org.codehaus.cargo.container.ContainerType; 9 import org.codehaus.cargo.container.InstalledLocalContainer; 10 import org.codehaus.cargo.container.State; 11 import org.codehaus.cargo.container.configuration.ConfigurationType; 12 import org.codehaus.cargo.container.configuration.LocalConfiguration; 13 import org.codehaus.cargo.container.deployable.WAR; 14 import org.codehaus.cargo.container.property.GeneralPropertySet; 15 import org.codehaus.cargo.container.property.ServletPropertySet; 16 import org.codehaus.cargo.generic.configuration.ConfigurationFactory; 17 import org.codehaus.cargo.generic.configuration.DefaultConfigurationFactory; 18 19 import com.tc.process.LinkedJavaProcessPollingAgent; 20 import com.tc.test.server.ServerParameters; 21 import com.tc.test.server.ServerResult; 22 import com.tc.test.server.appserver.AbstractAppServer; 23 import com.tc.test.server.appserver.AppServer; 24 import com.tc.test.server.appserver.AppServerInstallation; 25 import com.tc.test.server.appserver.AppServerParameters; 26 import com.tc.test.server.appserver.AppServerResult; 27 import com.tc.test.server.appserver.cargo.CargoJava.Link; 28 import com.tc.test.server.util.AppServerUtil; 29 30 import java.io.File ; 31 import java.util.Iterator ; 32 import java.util.Map ; 33 import java.util.Map.Entry; 34 35 39 public abstract class CargoAppServer extends AbstractAppServer { 40 41 private InstalledLocalContainer container; 42 private int port; 43 private int linkedPort; 44 45 public static final String CARGO_JAVA = "cargo_java"; 47 public static final String CARGO_JAVA_CLASS = CargoJava.class.getName(); 48 49 static { 50 System.setProperty(CARGO_JAVA, CARGO_JAVA_CLASS); 51 } 52 53 public CargoAppServer(AppServerInstallation installation) { 54 super(installation); 55 } 56 57 public final ServerResult start(ServerParameters rawParams) throws Exception { 58 AppServerParameters params = (AppServerParameters) rawParams; 59 port = AppServerUtil.getPort(); 60 File instance = createInstance(params); 61 setProperties(params, port, instance); 62 63 ConfigurationFactory factory = new DefaultConfigurationFactory(); 64 LocalConfiguration config = (LocalConfiguration)factory 65 .createConfiguration(cargoServerKey(), ContainerType.INSTALLED, ConfigurationType.STANDALONE, instance.getAbsolutePath()); 66 setConfigProperties(config); 67 config.setProperty(ServletPropertySet.PORT, Integer.toString(port)); 68 config.setProperty(GeneralPropertySet.JVMARGS, params.jvmArgs()); 69 config.setProperty(GeneralPropertySet.LOGGING, "high"); 70 addWars(config, params.wars(), params.instanceName()); 71 72 container = container(config); 73 container.setTimeout(8 * 60 * 1000); 74 container.setHome(serverInstallDirectory().getAbsolutePath()); 75 container.setLogger(new ConsoleLogger(params.instanceName())); 76 setExtraClasspath(params); 77 78 linkJavaProcess(instance); 79 80 82 container.start(); 83 84 return new AppServerResult(port, this); 85 } 86 87 public final void stop() { 88 if (container != null) { 89 if (container.getState().equals(State.STARTED) || container.getState().equals(State.STARTING) 90 || container.getState().equals(State.UNKNOWN)) { 91 try { 92 String jvmArgs = container.getConfiguration().getPropertyValue(GeneralPropertySet.JVMARGS); 95 try { 96 container.getConfiguration().setProperty(GeneralPropertySet.JVMARGS, null); 97 container.stop(); } finally { 99 container.getConfiguration().setProperty(GeneralPropertySet.JVMARGS, jvmArgs); 100 } 101 } catch (ContainerException e) { 102 throw new RuntimeException (e); 103 } 104 } 105 } 106 } 107 108 private void addWars(LocalConfiguration config, Map wars, String instanceName) { 109 WAR warapp = null; 110 for (Iterator it = wars.entrySet().iterator(); it.hasNext();) { 111 Map.Entry entry = (Entry) it.next(); 112 String context = (String ) entry.getKey(); 113 File warFile = (File ) entry.getValue(); 114 warapp = new WAR(warFile.getPath()); 115 warapp.setContext(context); 116 warapp.setLogger(new ConsoleLogger(instanceName)); 117 config.addDeployable(warapp); 118 } 119 } 120 121 126 private void linkJavaProcess(File instance) throws InterruptedException { 127 linkedPort = LinkedJavaProcessPollingAgent.getChildProcessHeartbeatServerPort(); 128 Link.put(new CargoJava.Args(linkedPort, instance)); 129 } 130 131 protected final InstalledLocalContainer container() { 132 return container; 133 } 134 135 protected abstract String cargoServerKey(); 136 137 protected abstract InstalledLocalContainer container(LocalConfiguration config); 138 139 protected void setConfigProperties(LocalConfiguration config) throws Exception { 140 } 142 143 protected void setExtraClasspath(AppServerParameters params) { 144 } 146 147 } 148 | Popular Tags |