Revision created by MOE tool push_codebase.
[gae.git] / java / src / main / com / google / appengine / tools / development / ManualServer.java
blob2466d103cdfc9b010451905a0e9473c00efdf247
1 package com.google.appengine.tools.development;
3 import com.google.appengine.tools.development.ApplicationConfigurationManager.ServerConfigurationHandle;
4 import com.google.apphosting.utils.config.AppEngineConfigException;
5 import com.google.apphosting.utils.config.AppEngineWebXml;
6 import com.google.common.collect.ImmutableList;
8 import java.io.File;
9 import java.util.List;
10 import java.util.Map;
11 import java.util.concurrent.atomic.AtomicInteger;
13 /**
14 * {@link Server} implementation for manual servers.
16 public class ManualServer extends AbstractServer {
17 private final AtomicInteger instanceCounter = new AtomicInteger();
19 ManualServer(ServerConfigurationHandle serverConfigurationHandle, String serverInfo,
20 String address, DevAppServerImpl devAppServer,
21 AppEngineWebXml appEngineWebXml) {
22 super(serverConfigurationHandle, serverInfo, null, address, devAppServer,
23 makeInstanceHolders(serverConfigurationHandle, appEngineWebXml));
26 private static List<InstanceHolder> makeInstanceHolders(
27 ServerConfigurationHandle serverConfigurationHandle, AppEngineWebXml appEngineWebXml) {
28 String instancesString = appEngineWebXml.getManualScaling().getInstances();
29 int instances = instancesString == null ? 0 : Integer.parseInt(instancesString);
30 if (instances < 0) {
31 throw new AppEngineConfigException("Invalid instances " + instances + " in file "
32 + serverConfigurationHandle.getModule().getAppEngineWebXmlFile());
35 ImmutableList.Builder<InstanceHolder> listBuilder = ImmutableList.builder();
36 for (int ix = LocalEnvironment.MAIN_INSTANCE; ix < instances; ix++) {
37 listBuilder.add(new InstanceHolder(ContainerUtils.loadContainer(), ix));
39 return listBuilder.build();
42 @Override
43 public LocalServerEnvironment doConfigure(
44 ServerConfigurationHandle serverConfigurationHandle, String serverInfo,
45 File externalResourceDir, String address, Map<String, Object> containerConfigProperties,
46 DevAppServerImpl devAppServer) throws Exception {
47 LocalServerEnvironment result = null;
48 for (InstanceHolder instanceHolder : getInstanceHolders()) {
49 int port = DevAppServerPortPropertyHelper.getPort(getServerName(),
50 instanceHolder.getInstance(), devAppServer.getServiceProperties());
51 LocalServerEnvironment thisEnvironment = instanceHolder.getContainerService().configure(
52 serverInfo, address, port, serverConfigurationHandle, externalResourceDir,
53 containerConfigProperties, instanceHolder.getInstance(), devAppServer);
54 if (result == null) {
55 result = thisEnvironment;
58 return result;
61 @Override
62 public boolean isServerLoadBalancingServer(int instance) {
63 return instance == LocalEnvironment.MAIN_INSTANCE;
66 @Override
67 public int getFreeInstance() {
68 int instance = instanceCounter.getAndIncrement() % getInstanceCount();
69 return instance;