beanstalkでさっとdynamodbのセッションを作る
Amazon DynamoDBによるTomcatセッション永続化とフェイルオーバー | Developers.IO
eclipseで普通にやるとsession用のdynamodbのテーブルが日本以外のリージョンにできてしまうので、context.xmlに以下の属性値を加える。
regionId="ap-northeast-1"
jax-rs
最初にbeanstalkでdynamodbセッション連携付きで適当なjavaアプリケーションをデプロイし、その後に同じEnvironmentにJAX-RSのアプリケーションをデプロイしたら、最初に作ったdynamodbのセッション機構が生き残っていた。
とりあえずはこれでいい。
DynamoDBLocal で session 管理
DynamoDB Local
sessionを触る
web services - How Can I Retrieve The Session Id from a Jax RS Webservice? - Stack Overflow
@Path("/session-id.txt")
public class SessionIdResource
{
@GET @Produces(MediaType.TEXT_PLAIN)
public String getSessionId( @Context HttpServletRequest request ){
return request.getSession(true).getId();
}
}
最終的にpom.xmlのdependenciesに以下を追記
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.9.22</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
=========しきりなおし===============
上記のやり方でJAX-RS上でDynamoDBに接続しようとしたところ、classpathの問題が発生した。
SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient] with root cause
java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient
よくわからなかったので、jax-rs周りからやり直すことにした。
JAX-RS
JAX-RS(Jersey)を使ってみる - azuki note
DynamoDB
周回遅れエンジニアノート: DynamoDB で tomcat の session を管理する
AWS - DynamoDBのドキュメントAPI、JSON対応したから簡単なサンプルで紹介する part1 - Qiita
private void getUser(String uid, String tableName) { //LOGGER.info("getUser start"); AWSCredentials credentials = new BasicAWSCredentials("XXXXXX", "XXXXXX"); AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials); client.setEndpoint("dynamodb.ap-northeast-1.amazonaws.com"); System.out.println("ok"); DynamoDB dynamo = new DynamoDB(client); Table table = dynamo.getTable("User"); Item item = table.getItem("uid", "abcde"); //AttributeをMap<String, Object>でまわせるのは便利 for (Map.Entry<String, Object> attribute : item.attributes()) { System.out .println(attribute.getKey() + ", " + attribute.getValue()); } //LOGGER.info("getUser end"); }
beanstalk + tomcat + maven でsession使う場合
Amazon DynamoDBによるTomcatセッション永続化とフェイルオーバー | Developers.IO
周回遅れエンジニアノート: DynamoDB で tomcat の session を管理する
.ebextensionsディレクトリの丸コピでいけた