updated gae demo to work on hpcloud

This commit is contained in:
Adrian Cole 2012-05-15 16:14:52 -07:00
parent c63f3119ca
commit 251754b20a
6 changed files with 297 additions and 54 deletions

View File

@ -32,10 +32,16 @@
<description>JClouds Sample for Google App Engine</description> <description>JClouds Sample for Google App Engine</description>
<properties> <properties>
<appengine.applicationid>jclouds-aws-demo</appengine.applicationid> <!--
<appengine.sdk.version>1.4.2</appengine.sdk.version> note you must set the property ${appengine.sdk.root} to a valid
extraction of appengine-java-sdk
-->
<appengine.applicationid>jclouds-hpcloud-demo</appengine.applicationid>
<appengine.sdk.version>1.6.5</appengine.sdk.version>
<devappserver.address>localhost</devappserver.address> <devappserver.address>localhost</devappserver.address>
<devappserver.port>8088</devappserver.port> <devappserver.port>8088</devappserver.port>
<test.hpcloud.identity>FIXME_IDENTITY</test.hpcloud.identity>
<test.hpcloud.credential>FIXME_CREDENTIAL</test.hpcloud.credential>
</properties> </properties>
<dependencies> <dependencies>
@ -51,13 +57,13 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jclouds.provider</groupId> <groupId>org.jclouds.provider</groupId>
<artifactId>aws-s3</artifactId> <artifactId>hpcloud-objectstorage</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jclouds.provider</groupId> <groupId>org.jclouds.provider</groupId>
<artifactId>aws-ec2</artifactId> <artifactId>hpcloud-compute</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
@ -71,6 +77,21 @@
<artifactId>guice-servlet</artifactId> <artifactId>guice-servlet</artifactId>
<version>3.0</version> <version>3.0</version>
</dependency> </dependency>
<!-- Google App Engine API -->
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>${appengine.sdk.version}</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-tools-sdk</artifactId>
<version>${appengine.sdk.version}</version>
<scope>test</scope>
</dependency>
<!-- WAR Dependencies: need to be validated -->
<dependency> <dependency>
<groupId>displaytag</groupId> <groupId>displaytag</groupId>
<artifactId>displaytag</artifactId> <artifactId>displaytag</artifactId>
@ -90,14 +111,14 @@
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>standard</artifactId> <artifactId>jstl</artifactId>
<groupId>taglibs</groupId> <groupId>javax.servlet</groupId>
<version>1.1.2</version> <version>1.1.2</version>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>jstl</artifactId> <artifactId>standard</artifactId>
<groupId>javax.servlet</groupId> <groupId>taglibs</groupId>
<version>1.1.2</version> <version>1.1.2</version>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
@ -107,17 +128,18 @@
<version>2.5</version> <version>2.5</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-tools-sdk</artifactId>
<version>${appengine.sdk.version}</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>${project.artifactId}</finalName> <finalName>${project.artifactId}</finalName>
<plugins> <plugins>
<plugin>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.2</version>
<configuration>
<!-- prevents the maven-war-plugin from including the resources in WEB-INF/classes -->
<attached>false</attached>
</configuration>
</plugin>
<plugin> <plugin>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version> <version>2.1.1</version>
@ -127,12 +149,207 @@
<webResources> <webResources>
<resource> <resource>
<directory>src/main/appengine</directory> <directory>src/main/appengine</directory>
<targetPath>WEB-INF/</targetPath> <targetPath>WEB-INF</targetPath>
<filtering>true</filtering> <filtering>true</filtering>
<excludes>
<exclude>.gitignore</exclude>
</excludes>
</resource> </resource>
</webResources> </webResources>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>com.ning.maven.plugins</groupId>
<artifactId>maven-duplicate-finder-plugin</artifactId>
<version>1.0.3</version>
<configuration>
<exceptions>
<exception>
<!-- Google App Engine Deps, some google classes are duplicated between packages -->
<conflictingDependencies>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-tools-sdk</artifactId>
<version>1.6.5</version>
<scope>test</scope>
</dependency>
</conflictingDependencies>
<packages>
<package>com.google</package>
</packages>
</exception>
<exception>
<!-- Tomcat bundles the JSR250 annotations too -->
<conflictingDependencies>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>annotations-api</artifactId>
<version>6.0.32</version>
<scope>test</scope>
</dependency>
</conflictingDependencies>
<packages>
<package>javax.annotation</package>
</packages>
</exception>
<exception>
<!-- commons-beanutils and commons-collections duplicate classes -->
<conflictingDependencies>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.7.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
<scope>runtime</scope>
</dependency>
</conflictingDependencies>
<packages>
<package>org.apache.commons.collections</package>
</packages>
</exception>
<exception>
<!-- javax.servlet is included in the appengine-tools-sdk, with Tomcat and Jetty -->
<conflictingDependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-tools-sdk</artifactId>
<version>1.6.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>servlet-api</artifactId>
<version>6.0.32</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-runner</artifactId>
<version>7.5.4.v20111024</version>
<scope>test</scope>
</dependency>
</conflictingDependencies>
<packages>
<package>javax.servlet</package>
</packages>
<resources>
<!-- javax.servlet is included in the appengine-tools-sdk and Tomcat -->
<resource>javax/servlet/resources/XMLSchema.dtd</resource>
<resource>javax/servlet/resources/datatypes.dtd</resource>
<resource>javax/servlet/resources/j2ee_1_4.xsd</resource>
<resource>javax/servlet/resources/j2ee_web_services_client_1_1.xsd</resource>
<resource>javax/servlet/resources/javaee_5.xsd</resource>
<resource>javax/servlet/resources/javaee_web_services_client_1_2.xsd</resource>
<resource>javax/servlet/resources/jsp_2_0.xsd</resource>
<resource>javax/servlet/resources/jsp_2_1.xsd</resource>
<resource>javax/servlet/resources/web-app_2_2.dtd</resource>
<resource>javax/servlet/resources/web-app_2_3.dtd</resource>
<resource>javax/servlet/resources/web-app_2_4.xsd</resource>
<resource>javax/servlet/resources/web-app_2_5.xsd</resource>
<resource>javax/servlet/resources/xml.xsd</resource>
<resource>javax/servlet/LocalStrings.properties</resource>
<resource>javax/servlet/LocalStrings_fr.properties</resource>
<resource>javax/servlet/LocalStrings_ja.properties</resource>
<resource>javax/servlet/http/LocalStrings.properties</resource>
<resource>javax/servlet/http/LocalStrings_es.properties</resource>
<resource>javax/servlet/http/LocalStrings_fr.properties</resource>
<resource>javax/servlet/http/LocalStrings_ja.properties</resource>
</resources>
</exception>
<exception>
<!-- Jasper and Catalina duplicate some classes -->
<conflictingDependencies>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>catalina</artifactId>
<version>6.0.32</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>jasper</artifactId>
<version>6.0.32</version>
<scope>test</scope>
</dependency>
</conflictingDependencies>
<classes>
<class>org.apache.AnnotationProcessor</class>
<class>org.apache.PeriodicEventListener</class>
</classes>
</exception>
<exception>
<!-- Jetty Runner includes taglibs and jstl -->
<conflictingDependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-runner</artifactId>
<version>7.5.4.v20111024</version>
<scope>test</scope>
</dependency>
</conflictingDependencies>
<packages>
<package>javax.servlet.jsp.jstl</package>
<package>org.apache.taglibs</package>
</packages>
<resources>
<resource>META-INF/c-1_0-rt.tld</resource>
<resource>META-INF/c-1_0.tld</resource>
<resource>META-INF/c.tld</resource>
<resource>META-INF/fmt-1_0-rt.tld</resource>
<resource>META-INF/fmt-1_0.tld</resource>
<resource>META-INF/fmt.tld</resource>
<resource>META-INF/fn.tld</resource>
<resource>META-INF/permittedTaglibs.tld</resource>
<resource>META-INF/scriptfree.tld</resource>
<resource>META-INF/sql-1_0-rt.tld</resource>
<resource>META-INF/sql-1_0.tld</resource>
<resource>META-INF/sql.tld</resource>
<resource>META-INF/x-1_0-rt.tld</resource>
<resource>META-INF/x-1_0.tld</resource>
<resource>META-INF/x.tld</resource>
<resource>org/apache/taglibs/standard/lang/jstl/Resources.properties</resource>
<resource>org/apache/taglibs/standard/lang/jstl/Resources_ja.properties</resource>
<resource>org/apache/taglibs/standard/resources/Resources.properties</resource>
<resource>org/apache/taglibs/standard/resources/Resources_ja.properties</resource>
</resources>
</exception>
</exceptions>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
@ -152,8 +369,8 @@
</goals> </goals>
<configuration> <configuration>
<systemPropertyVariables> <systemPropertyVariables>
<test.aws.identity>${test.aws-s3.identity}</test.aws.identity> <test.hpcloud.identity>${test.hpcloud.identity}</test.hpcloud.identity>
<test.aws.credential>${test.aws-s3.credential}</test.aws.credential> <test.hpcloud.credential>${test.hpcloud.credential}</test.hpcloud.credential>
<appengine.sdk.root>${appengine.sdk.root}</appengine.sdk.root> <appengine.sdk.root>${appengine.sdk.root}</appengine.sdk.root>
<devappserver.address>${devappserver.address}</devappserver.address> <devappserver.address>${devappserver.address}</devappserver.address>
<devappserver.port>${devappserver.port}</devappserver.port> <devappserver.port>${devappserver.port}</devappserver.port>
@ -166,5 +383,21 @@
</plugins> </plugins>
</build> </build>
</profile> </profile>
<profile>
<id>deploy</id>
<build>
<plugins>
<plugin>
<groupId>net.kindleit</groupId>
<artifactId>maven-gae-plugin</artifactId>
<version>0.9.2</version>
<configuration>
<serverId>google-appengine</serverId>
<sdkDir>${appengine.sdk.root}</sdkDir>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles> </profiles>
</project> </project>

View File

@ -25,4 +25,5 @@
<system-properties> <system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties" /> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
</system-properties> </system-properties>
<threadsafe>true</threadsafe>
</appengine-web-app> </appengine-web-app>

View File

@ -18,10 +18,10 @@
*/ */
package org.jclouds.samples.googleappengine.config; package org.jclouds.samples.googleappengine.config;
import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_NODE_RUNNING; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_NODE_TERMINATED; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_PORT_OPEN; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_SCRIPT_COMPLETE; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -29,10 +29,9 @@ import java.util.Properties;
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextEvent;
import org.jclouds.ContextBuilder;
import org.jclouds.blobstore.BlobStoreContext; import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.BlobStoreContextFactory;
import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.ComputeServiceContextFactory;
import org.jclouds.gae.config.AsyncGoogleAppEngineConfigurationModule; import org.jclouds.gae.config.AsyncGoogleAppEngineConfigurationModule;
import org.jclouds.samples.googleappengine.GetAllStatusController; import org.jclouds.samples.googleappengine.GetAllStatusController;
@ -57,19 +56,25 @@ public class GuiceServletConfig extends GuiceServletContextListener {
@Override @Override
public void contextInitialized(ServletContextEvent servletContextEvent) { public void contextInitialized(ServletContextEvent servletContextEvent) {
Properties props = loadJCloudsProperties(servletContextEvent); Properties overrides = loadJCloudsProperties(servletContextEvent);
props.setProperty(PROPERTY_TIMEOUT_NODE_TERMINATED, "25000"); overrides.setProperty(TIMEOUT_NODE_TERMINATED, "25000");
props.setProperty(PROPERTY_TIMEOUT_NODE_RUNNING, "25000"); overrides.setProperty(TIMEOUT_NODE_RUNNING, "25000");
props.setProperty(PROPERTY_TIMEOUT_SCRIPT_COMPLETE, "25000"); overrides.setProperty(TIMEOUT_SCRIPT_COMPLETE, "25000");
props.setProperty(PROPERTY_TIMEOUT_PORT_OPEN, "25000"); overrides.setProperty(TIMEOUT_PORT_OPEN, "25000");
// note that this module hooks into the async urlfetchservice // note that this module hooks into the async urlfetchservice
ImmutableSet<Module> modules = ImmutableSet.<Module> of(new AsyncGoogleAppEngineConfigurationModule()); ImmutableSet<Module> modules = ImmutableSet.<Module> of(new AsyncGoogleAppEngineConfigurationModule());
blobsStoreContexts = ImmutableSet.<BlobStoreContext> of(new BlobStoreContextFactory().createContext("aws-s3", blobsStoreContexts = ImmutableSet.of(
modules, props)); ContextBuilder.newBuilder("hpcloud-objectstorage")
computeServiceContexts = ImmutableSet.<ComputeServiceContext> of(new ComputeServiceContextFactory() .modules(modules)
.createContext("aws-ec2", modules, props)); .overrides(overrides)
.buildView(BlobStoreContext.class));
computeServiceContexts = ImmutableSet.of(
ContextBuilder.newBuilder("hpcloud-compute")
.modules(modules)
.overrides(overrides)
.buildView(ComputeServiceContext.class));
super.contextInitialized(servletContextEvent); super.contextInitialized(servletContextEvent);
} }

View File

@ -18,6 +18,8 @@
*/ */
package org.jclouds.samples.googleappengine.functions; package org.jclouds.samples.googleappengine.functions;
import java.net.URI;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Singleton; import javax.inject.Singleton;
@ -38,7 +40,7 @@ public class BlobStoreContextToStatusResult implements Function<BlobStoreContext
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
public StatusResult apply(BlobStoreContext in) { public StatusResult apply(BlobStoreContext in) {
String host = in.getProviderSpecificContext().getEndpoint().getHost(); String host = URI.create(in.unwrap().getProviderMetadata().getEndpoint()).getHost();
String status; String status;
String name = "not found"; String name = "not found";
try { try {
@ -51,6 +53,6 @@ public class BlobStoreContextToStatusResult implements Function<BlobStoreContext
logger.error(e, "Error listing context %s", in); logger.error(e, "Error listing context %s", in);
status = (e.getMessage()); status = (e.getMessage());
} }
return new StatusResult(in.getProviderSpecificContext().getId(), host, name, status); return new StatusResult(in.unwrap().getId(), host, name, status);
} }
} }

View File

@ -18,6 +18,8 @@
*/ */
package org.jclouds.samples.googleappengine.functions; package org.jclouds.samples.googleappengine.functions;
import java.net.URI;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.inject.Singleton; import javax.inject.Singleton;
@ -38,7 +40,7 @@ public class ComputeServiceContextToStatusResult implements Function<ComputeServ
protected Logger logger = Logger.NULL; protected Logger logger = Logger.NULL;
public StatusResult apply(ComputeServiceContext in) { public StatusResult apply(ComputeServiceContext in) {
String host = in.getProviderSpecificContext().getEndpoint().getHost(); String host = URI.create(in.unwrap().getProviderMetadata().getEndpoint()).getHost();
String status; String status;
String name = "not found"; String name = "not found";
try { try {
@ -51,6 +53,6 @@ public class ComputeServiceContextToStatusResult implements Function<ComputeServ
logger.error(e, "Error listing context %s", in); logger.error(e, "Error listing context %s", in);
status = (e.getMessage()); status = (e.getMessage());
} }
return new StatusResult(in.getProviderSpecificContext().getId(), host, name, status); return new StatusResult(in.unwrap().getId(), host, name, status);
} }
} }

View File

@ -48,14 +48,14 @@ public class GoogleAppEngineLiveTest {
throws Exception { throws Exception {
url = new URL(String.format("http://%s:%s", address, port)); url = new URL(String.format("http://%s:%s", address, port));
Properties props = new Properties(); Properties props = new Properties();
String identity = checkNotNull(System.getProperty("test.aws.identity"), String identity = checkNotNull(System.getProperty("test.hpcloud.identity"),
"test.aws.identity"); "test.hpcloud.identity");
String credential = checkNotNull(System.getProperty("test.aws.credential"), String credential = checkNotNull(System.getProperty("test.hpcloud.credential"),
"test.aws.credential"); "test.hpcloud.credential");
/** /**
* Since both s3 and ec2 use the same credentials, we can take a shortcut and specify both * Since both objectstorage and compute use the same credentials, we can
* here: * take a shortcut and specify both here:
*/ */
props.setProperty("jclouds.identity", identity); props.setProperty("jclouds.identity", identity);
props.setProperty("jclouds.credential", credential); props.setProperty("jclouds.credential", credential);