简体   繁体   English

从Java Servlet使用AWS SimpleDB创建域

[英]Creating Domain with AWS SimpleDB from Java Servlet

I am a university student working on a research project that involves migrating a web application to Amazon's cloud. 我是一名正在研究项目的大学生,该项目涉及将Web应用程序迁移到Amazon的云。 I spent the last semester working with servlets and was able to get the majority of the app's functionality working using a java servlet running in Tomcat. 我上学期使用了servlet,并且使用在Tomcat中运行的Java servlet可以使大多数应用程序功能正常工作。

I am now trying to integrate Amazon Web Services such as the SimpleDB and E-mail service. 我现在正在尝试集成Amazon Web Services,例如SimpleDB和电子邮件服务。 I develop using the Eclipse Java EE for Web Developers Indigo IDE. 我使用Eclipse Java EE for Web Developers Indigo IDE进行开发。 I have the AWS plugin installed and am able to run sample code that Amazon provides to call SDB and SES successfully. 我已经安装了AWS插件,并且能够运行Amazon提供的示例代码来成功调用SDB和SES。

However when I attempt to call a service like simpleDB from the servlet either directly or through a separate class I receive the following error: 但是,当我尝试直接或通过单独的类从Servlet调用诸如simpleDB之类的服务时,会收到以下错误:

HTTP Status 500 - HTTP状态500-

type Exception report 类型例外报告

message 信息

description The server encountered an internal error () that prevented it from fulfilling this request. 描述服务器遇到内部错误(),导致服务器无法满足此请求。

exception 例外

javax.servlet.ServletException: Error instantiating servlet class org.comtor.cloud.api.APIservlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:680) root cause javax.servlet.ServletException:实例化servlet类org.comtor.cloud.api.APIservlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValveve .java:98)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)org.apache.coyote.http11.AbstractHttp11Processor .process(AbstractHttp11Processor.java:987)org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:539)org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:298)java .util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)java.lang.Thread.run(Thread.java:680)根原因

java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials java.lang.Class.getDeclaredConstructors0(Native Method) java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) java.lang.Class.getConstructor0(Class.java:2699) java.lang.Class.newInstance0(Class.java:326) java.lang.Class.newInstance(Class.java:308) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util. java.lang.NoClassDefFoundError:com / amazonaws / auth / AWSCredentials java.lang.Class.getDeclaredConstructors0(本地方法)java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)java.lang.Class.getConclaror0(Class.java: 2699)java.lang.Class.newInstance0(Class.java:326)java.lang.Class.newInstance(Class.java:308)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)组织。 apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 407)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:539)org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:298)java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)java.util。 concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:680) root cause parallel.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)java.lang.Thread.run(Thread.java:680)根本原因

java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533) java.lang.Class.getDeclaredConstructors0(Native Method) java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) java.lang.Class.getConstructor0(Class.java:2699) java.lang.Class.newInstance0(Class.java:326) java.lang.Class.newInstance(Class.java:308) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) org.a java.lang.ClassNotFoundException:com.amazonaws.auth.AWSCredentials org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)java .lang.Class.getDeclaredConstructors0(本机方法)java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)java.lang.Class.getConstructor0(Class.java:2699)java.lang.Class.newInstance0(Class.java: 326)java.lang.Class.newInstance(Class.java:308)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 98)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)org.apache.coyote.http11.AbstractHttp11Processor.process( AbstractHttp11Processor.java:987)org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:539)org.a pache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:680) note The full stack trace of the root cause is available in the Apache Tomcat/7.0.23 logs. pache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:298)java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)java.util.concurrent.ThreadPoolExecutor $ Worker.run( ThreadPoolExecutor.java:908)java.lang.Thread.run(Thread.java:680)注意根本原因的完整堆栈跟踪可在Apache Tomcat / 7.0.23日志中找到。

Apache Tomcat/7.0.23 Apache Tomcat / 7.0.23

My code looks like this: 我的代码如下所示:

package org.comtor.cloud.api;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.simpledb.AmazonSimpleDBClient;
import com.amazonaws.services.simpledb.model.CreateDomainRequest;

import java.io.IOException;

@SuppressWarnings("serial")
public class APIservlet extends HttpServlet {
  public void doGet (HttpServletRequest request,
                     HttpServletResponse response)
    throws ServletException, IOException
  {
      doPost(request, response);
  }
  public void doPost(HttpServletRequest request,
          HttpServletResponse response)
                  throws ServletException, IOException {
        PrintWriter out = response.getWriter();

        // AWS Credentials
        String sAccessKey = "myAccessKey";
        String sSecretKey = "mySecretKey";

        // Authenticate AWS account
        BasicAWSCredentials oAWSCredentials = new BasicAWSCredentials(sAccessKey, sSecretKey);
        AmazonSimpleDBClient awsSimpleDBClient = new AmazonSimpleDBClient(oAWSCredentials);

        // Try to access simpleDB
        try 
        {
            System.out.println("Connecting to Simple Database");
            // Create a domain
            String myDomain = "MyStore";
            System.out.println("Creating domain called " + myDomain + ".\n");
            awsSimpleDBClient.createDomain(new CreateDomainRequest(myDomain));
            System.out.println("Connection Made");

        } 
        // Print Error Stack Trace
        catch (NoSuchAlgorithmException e) 
        {
            e.printStackTrace();
        }

        // Close PrintWriter
        out.close();
  }
}

** Access & Secret Keys removed from code ** **访问和秘密密钥已从代码中删除**

The same goes for SES. SES也是如此。 I have also tried using a java library like 'typica' and still receive a NoClassDef error. 我也尝试过使用像'typica'这样的Java库,仍然收到NoClassDef错误。 I have the AWS library in my build path under the libraries folder and the jar package / classes seem to be there. 我的构建路径中的AWS库位于libraries文件夹下,并且jar包/类似乎在那里。 So I am unsure why I am unable to use these classes to interact with simpleDB from my servlet. 因此,我不确定为什么无法使用这些类与servlet中的simpleDB进行交互。

I'd greatly appreciate any help on this matter. 非常感谢您对此事的帮助。 I believe I am not fully understanding how to call AWS SDB from a web environment. 我相信我不完全了解如何从Web环境调用AWS SDB。

Thank you. 谢谢。

java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials indicates that this class is not on your classpath. java.lang.ClassNotFoundException:com.amazonaws.auth.AWSCredentials指示此类不在您的类路径中。 Make sure that the jar containing the com.amazonaws.auth.AWSCredentials class is included in your web application's WEB-INF/lib folder. 确保包含com.amazonaws.auth.AWSCredentials类的jar包含在Web应用程序的WEB-INF / lib文件夹中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM