mirror of https://github.com/apache/jclouds.git
moved samples to s3 module
git-svn-id: http://jclouds.googlecode.com/svn/trunk@642 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
0d0e0eb1cd
commit
589c37ec04
|
@ -0,0 +1,54 @@
|
||||||
|
====
|
||||||
|
|
||||||
|
Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
====================================================================
|
||||||
|
====
|
||||||
|
This samples uses the Google App Engine for Java SDK located at http://googleappengine.googlecode.com/files/appengine-java-sdk-1.2.0.zip
|
||||||
|
|
||||||
|
Please unzip the above file and modify your maven settings.xml like below before attempting to run 'mvn install'
|
||||||
|
|
||||||
|
<profile>
|
||||||
|
<id>appengine</id>
|
||||||
|
<activation>
|
||||||
|
<activeByDefault>true</activeByDefault>
|
||||||
|
</activation>
|
||||||
|
<properties>
|
||||||
|
<appengine.home>/path/to/appengine-java-sdk-1.2.0</appengine.home>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<profile>
|
||||||
|
<id>aws</id>
|
||||||
|
<activation>
|
||||||
|
<activeByDefault>true</activeByDefault>
|
||||||
|
</activation>
|
||||||
|
<properties>
|
||||||
|
<jclouds.aws.accesskeyid>YOUR_ACCESS_KEY_ID</jclouds.aws.accesskeyid>
|
||||||
|
<jclouds.aws.secretaccesskey>YOUR_SECRET_KEY</jclouds.aws.secretaccesskey>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>jclouds</id>
|
||||||
|
<url>http://jclouds.googlecode.com/svn/trunk/repo</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
|
@ -0,0 +1,194 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
$HeadURL$
|
||||||
|
$Revision$
|
||||||
|
$Date$
|
||||||
|
|
||||||
|
Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>jclouds-project</artifactId>
|
||||||
|
<groupId>org.jclouds</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../../../project/pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>jclouds-gae-s3-example</artifactId>
|
||||||
|
<packaging>war</packaging>
|
||||||
|
<name>JClouds Sample for Google App Engine</name>
|
||||||
|
<description>JClouds Sample for Google App Engine</description>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<!-- note you must set the property ${appengine.home} to a valid extraction of appengine-java-sdk -->
|
||||||
|
<appengine.home>/Users/adriancole/Desktop/appengine-java-sdk-1.2.0</appengine.home>
|
||||||
|
<devappserver.address>localhost</devappserver.address>
|
||||||
|
<devappserver.port>8088</devappserver.port>
|
||||||
|
<jclouds.aws.accesskeyid></jclouds.aws.accesskeyid>
|
||||||
|
<jclouds.aws.secretaccesskey></jclouds.aws.secretaccesskey>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>guice-snapshot</id>
|
||||||
|
<url>http://guice-maven.googlecode.com/svn/trunk</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<pluginRepositories>
|
||||||
|
<pluginRepository>
|
||||||
|
<id>Main Maven Repo</id>
|
||||||
|
<url>http://repo1.maven.org/maven2/</url>
|
||||||
|
</pluginRepository>
|
||||||
|
</pluginRepositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-gae</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-s3</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-s3</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
<type>test-jar</type>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.guice</groupId>
|
||||||
|
<artifactId>guice-servlet</artifactId>
|
||||||
|
<version>2.0-r943</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<artifactId>standard</artifactId>
|
||||||
|
<groupId>taglibs</groupId>
|
||||||
|
<version>1.1.2</version>
|
||||||
|
<type>jar</type>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<artifactId>jstl</artifactId>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<version>1.1.2</version>
|
||||||
|
<type>jar</type>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.geronimo.specs</groupId>
|
||||||
|
<artifactId>geronimo-el_1.0_spec</artifactId>
|
||||||
|
<version>1.0.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.geronimo.specs</groupId>
|
||||||
|
<artifactId>geronimo-jsp_2.1_spec</artifactId>
|
||||||
|
<version>1.0.1</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.geronimo.specs</groupId>
|
||||||
|
<artifactId>geronimo-servlet_2.5_spec</artifactId>
|
||||||
|
<version>1.2</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.appengine</groupId>
|
||||||
|
<artifactId>appengine-tools-api</artifactId>
|
||||||
|
<version>1.2.0</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${appengine.home}/lib/appengine-tools-api.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<finalName>${project.artifactId}</finalName>
|
||||||
|
<testSourceDirectory>src/it/java</testSourceDirectory>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.4.3</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>integration</id>
|
||||||
|
<phase>integration-test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>test</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<testClassesDirectory>target/test-classes</testClassesDirectory>
|
||||||
|
<systemProperties>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.aws.accesskeyid</name>
|
||||||
|
<value>${jclouds.aws.accesskeyid}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.aws.secretaccesskey</name>
|
||||||
|
<value>${jclouds.aws.secretaccesskey}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>appengine.home</name>
|
||||||
|
<value>${appengine.home}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>devappserver.address</name>
|
||||||
|
<value>${devappserver.address}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>devappserver.port</name>
|
||||||
|
<value>${devappserver.port}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>warfile</name>
|
||||||
|
<value>${project.build.directory}/${project.artifactId}</value>
|
||||||
|
</property>
|
||||||
|
</systemProperties>
|
||||||
|
<additionalClasspathElements>
|
||||||
|
<additionalClasspathElement>${appengine.home}/lib/appengine-tools-api.jar
|
||||||
|
</additionalClasspathElement>
|
||||||
|
</additionalClasspathElements>
|
||||||
|
<environmentVariables>
|
||||||
|
<DEBUG>true</DEBUG>
|
||||||
|
<SDK_BIN>${appengine.home}/bin</SDK_BIN>
|
||||||
|
<SDK_LIB>${appengine.home}/lib</SDK_LIB>
|
||||||
|
<SDK_CONFIG>${appengine.home}/config/sdk</SDK_CONFIG>
|
||||||
|
</environmentVariables>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<!-- fool default surefire execution in 'test' to not find any test classes -->
|
||||||
|
<testClassesDirectory>target/classes</testClassesDirectory>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
</build>
|
||||||
|
</project>
|
|
@ -0,0 +1,75 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
* ====================================================================
|
||||||
|
*/
|
||||||
|
package org.jclouds.samples.googleappengine.functest;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.testng.annotations.AfterTest;
|
||||||
|
|
||||||
|
import com.google.appengine.tools.KickStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic functionality to start a local google app engine instance.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class BaseGoogleAppEngineTest {
|
||||||
|
|
||||||
|
Thread server;
|
||||||
|
URL url;
|
||||||
|
|
||||||
|
protected void writePropertiesAndStartServer(final String address,
|
||||||
|
final String port, final String warfile, Properties props)
|
||||||
|
throws IOException, FileNotFoundException, InterruptedException {
|
||||||
|
url = new URL(String.format("http://%1$s:%2$s", address, port));
|
||||||
|
|
||||||
|
props.store(new FileOutputStream(String.format(
|
||||||
|
"%1$s/WEB-INF/jclouds.properties", warfile)), "test");
|
||||||
|
this.server = new Thread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
KickStart
|
||||||
|
.main(new String[] {
|
||||||
|
"com.google.appengine.tools.development.DevAppServerMain",
|
||||||
|
"--disable_update_check", "-a", address, "-p",
|
||||||
|
port, warfile });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
server.start();
|
||||||
|
Thread.sleep(7 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@AfterTest
|
||||||
|
public void stopDevAppServer() throws Exception {
|
||||||
|
server.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
* ====================================================================
|
||||||
|
*/
|
||||||
|
package org.jclouds.samples.googleappengine.functest;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.jclouds.aws.s3.reference.S3Constants;
|
||||||
|
import org.testng.annotations.BeforeTest;
|
||||||
|
import org.testng.annotations.Optional;
|
||||||
|
import org.testng.annotations.Parameters;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts up the Google App Engine for Java Development environment and deploys
|
||||||
|
* an application which tests S3.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Test(groups = "integration", enabled = true, sequential = true, testName = "functionalTests")
|
||||||
|
public class GoogleAppEngineTest extends BaseGoogleAppEngineTest {
|
||||||
|
|
||||||
|
private static final String sysAWSAccessKeyId = System
|
||||||
|
.getProperty(S3Constants.PROPERTY_AWS_ACCESSKEYID);
|
||||||
|
private static final String sysAWSSecretAccessKey = System
|
||||||
|
.getProperty(S3Constants.PROPERTY_AWS_SECRETACCESSKEY);
|
||||||
|
|
||||||
|
@BeforeTest
|
||||||
|
@Parameters( { "warfile", "devappserver.address", "devappserver.port",
|
||||||
|
S3Constants.PROPERTY_AWS_ACCESSKEYID,
|
||||||
|
S3Constants.PROPERTY_AWS_SECRETACCESSKEY })
|
||||||
|
public void startDevAppServer(final String warfile, final String address,
|
||||||
|
final String port, @Optional String AWSAccessKeyId,
|
||||||
|
@Optional String AWSSecretAccessKey) throws Exception {
|
||||||
|
AWSAccessKeyId = AWSAccessKeyId != null ? AWSAccessKeyId
|
||||||
|
: sysAWSAccessKeyId;
|
||||||
|
AWSSecretAccessKey = AWSSecretAccessKey != null ? AWSSecretAccessKey
|
||||||
|
: sysAWSSecretAccessKey;
|
||||||
|
|
||||||
|
checkNotNull(AWSAccessKeyId, "AWSAccessKeyId");
|
||||||
|
checkNotNull(AWSSecretAccessKey, "AWSSecretAccessKey");
|
||||||
|
|
||||||
|
Properties props = new Properties();
|
||||||
|
props.put(S3Constants.PROPERTY_AWS_ACCESSKEYID, AWSAccessKeyId);
|
||||||
|
props.put(S3Constants.PROPERTY_AWS_SECRETACCESSKEY, AWSSecretAccessKey);
|
||||||
|
writePropertiesAndStartServer(address, port, warfile, props);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldPass() throws InterruptedException, IOException {
|
||||||
|
InputStream i = url.openStream();
|
||||||
|
String string = IOUtils.toString(i);
|
||||||
|
assert string.indexOf("Hello World!") >= 0 : string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(invocationCount = 5, enabled = true)
|
||||||
|
public void testGuiceJCloudsSerial() throws InterruptedException,
|
||||||
|
IOException {
|
||||||
|
URL gurl = new URL(url, "/guice/listbuckets.s3");
|
||||||
|
InputStream i = gurl.openStream();
|
||||||
|
String string = IOUtils.toString(i);
|
||||||
|
assert string.indexOf("List") >= 0 : string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(invocationCount = 50, enabled = true, threadPoolSize = 10)
|
||||||
|
public void testGuiceJCloudsParallel() throws InterruptedException,
|
||||||
|
IOException {
|
||||||
|
URL gurl = new URL(url, "/guice/listbuckets.s3");
|
||||||
|
InputStream i = gurl.openStream();
|
||||||
|
String string = IOUtils.toString(i);
|
||||||
|
assert string.indexOf("List") >= 0 : string;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
* ====================================================================
|
||||||
|
*/
|
||||||
|
package org.jclouds.samples.googleappengine;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.jclouds.aws.s3.S3Context;
|
||||||
|
import org.jclouds.aws.s3.S3ResponseException;
|
||||||
|
import org.jclouds.aws.s3.domain.S3Bucket;
|
||||||
|
import org.jclouds.logging.Logger;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows an example of how to use @{link S3Connection} injected with Guice.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class JCloudsServlet extends HttpServlet {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
S3Context context;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doGet(HttpServletRequest httpServletRequest,
|
||||||
|
HttpServletResponse httpServletResponse) throws ServletException,
|
||||||
|
IOException {
|
||||||
|
httpServletResponse.setContentType("text/plain");
|
||||||
|
Writer writer = httpServletResponse.getWriter();
|
||||||
|
try {
|
||||||
|
List<S3Bucket.Metadata> myBuckets = context.getConnection()
|
||||||
|
.listOwnedBuckets().get(10, TimeUnit.SECONDS);
|
||||||
|
writer.write("List:\n");
|
||||||
|
for (S3Bucket.Metadata bucket : myBuckets) {
|
||||||
|
writer.write(String.format(" %1$s", bucket));
|
||||||
|
try {
|
||||||
|
writer.write(String.format(": %1$s entries%n", context
|
||||||
|
.createInputStreamMap(bucket.getName()).size()));
|
||||||
|
} catch (S3ResponseException e) {
|
||||||
|
String message = String.format(
|
||||||
|
": unable to list entries due to: %1$s%n", e
|
||||||
|
.getError().getCode());
|
||||||
|
writer.write(message);
|
||||||
|
logger.warn(e, "message");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new ServletException(e);
|
||||||
|
}
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
* ====================================================================
|
||||||
|
*/
|
||||||
|
package org.jclouds.samples.googleappengine.config;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContextEvent;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.jclouds.aws.s3.S3Context;
|
||||||
|
import org.jclouds.aws.s3.S3ContextFactory;
|
||||||
|
import org.jclouds.aws.s3.reference.S3Constants;
|
||||||
|
import org.jclouds.gae.config.URLFetchServiceClientModule;
|
||||||
|
import org.jclouds.samples.googleappengine.JCloudsServlet;
|
||||||
|
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Injector;
|
||||||
|
import com.google.inject.servlet.GuiceServletContextListener;
|
||||||
|
import com.google.inject.servlet.ServletModule;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup Logging and create Injector for use in testing S3.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GuiceServletConfig extends GuiceServletContextListener {
|
||||||
|
@Inject
|
||||||
|
S3Context context;
|
||||||
|
String accessKeyId;
|
||||||
|
String secretAccessKey;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextInitialized(ServletContextEvent servletContextEvent) {
|
||||||
|
Properties props = loadJCloudsProperties(servletContextEvent);
|
||||||
|
this.accessKeyId = props
|
||||||
|
.getProperty(S3Constants.PROPERTY_AWS_ACCESSKEYID);
|
||||||
|
this.secretAccessKey = props
|
||||||
|
.getProperty(S3Constants.PROPERTY_AWS_SECRETACCESSKEY);
|
||||||
|
super.contextInitialized(servletContextEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Properties loadJCloudsProperties(
|
||||||
|
ServletContextEvent servletContextEvent) {
|
||||||
|
InputStream input = servletContextEvent.getServletContext()
|
||||||
|
.getResourceAsStream("/WEB-INF/jclouds.properties");
|
||||||
|
Properties props = new Properties();
|
||||||
|
try {
|
||||||
|
props.load(input);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} finally {
|
||||||
|
IOUtils.closeQuietly(input);
|
||||||
|
}
|
||||||
|
return props;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Injector getInjector() {
|
||||||
|
return S3ContextFactory.createInjector(accessKeyId, secretAccessKey,
|
||||||
|
false, new URLFetchServiceClientModule(),
|
||||||
|
new ServletModule() {
|
||||||
|
@Override
|
||||||
|
protected void configureServlets() {
|
||||||
|
serve("*.s3").with(JCloudsServlet.class);
|
||||||
|
requestInjection(this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void contextDestroyed(ServletContextEvent servletContextEvent) {
|
||||||
|
context.close();
|
||||||
|
super.contextDestroyed(servletContextEvent);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
====================================================================
|
||||||
|
|
||||||
|
-->
|
||||||
|
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
|
||||||
|
<application>jclouds-s3-example</application>
|
||||||
|
<version>1</version>
|
||||||
|
</appengine-web-app>
|
|
@ -0,0 +1,48 @@
|
||||||
|
<!--
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
====================================================================
|
||||||
|
|
||||||
|
-->
|
||||||
|
<!DOCTYPE web-app PUBLIC
|
||||||
|
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
||||||
|
"http://java.sun.com/dtd/web-app_2_3.dtd">
|
||||||
|
|
||||||
|
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
|
||||||
|
<display-name>jclouds-s3-example</display-name>
|
||||||
|
|
||||||
|
<!-- Servlets -->
|
||||||
|
<filter>
|
||||||
|
<filter-name>guiceFilter</filter-name>
|
||||||
|
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
|
||||||
|
</filter>
|
||||||
|
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>guiceFilter</filter-name>
|
||||||
|
<url-pattern>/guice/*</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
|
||||||
|
|
||||||
|
<listener>
|
||||||
|
<listener-class>org.jclouds.samples.googleappengine.config.GuiceServletConfig</listener-class>
|
||||||
|
</listener>
|
||||||
|
</web-app>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<%--
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
====================================================================
|
||||||
|
|
||||||
|
--%>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<h2>Hello World!</h2>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue