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
;
11 import java
.util
.concurrent
.atomic
.AtomicInteger
;
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
);
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();
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
);
55 result
= thisEnvironment
;
62 public boolean isServerLoadBalancingServer(int instance
) {
63 return instance
== LocalEnvironment
.MAIN_INSTANCE
;
67 public int getFreeInstance() {
68 int instance
= instanceCounter
.getAndIncrement() % getInstanceCount();