Создание домена с помощью AWS SimpleDB из сервлета Java - PullRequest
2 голосов
/ 20 января 2012

Я студент университета, работаю над исследовательским проектом, который включает миграцию веб-приложения в облако Amazon.Я провел последний семестр, работая с сервлетами, и смог заставить большинство функций приложения работать с использованием Java-сервлета, запущенного в Tomcat.

Я сейчас пытаюсь интегрировать Amazon Web Services, такие как SimpleDB и E-почтовый сервисЯ разрабатываю с использованием Eclipse Java EE для веб-разработчиков Indigo IDE.У меня установлен плагин AWS, и я могу запустить пример кода, который Amazon предоставляет для успешного вызова SDB и SES.

Однако, когда я пытаюсь вызвать службу типа simpleDB из сервлета либо напрямую, либо через отдельный класс Iполучить следующую ошибку:

HTTP-статус 500 -

тип Отчет об исключении

сообщение

описание Обнаружен сервервнутренняя ошибка (), которая помешала ему выполнить этот запрос.

исключение

javax.servlet.ServletException: Ошибка создания экземпляра класса сервлета 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 (доступ) или логический класс.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.tilis).concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) java.lang.Thread *run (Thread.java:6)1020 *

java.lang.NoClassDefFoundError: com / amazonaws / auth / AWSCredentials java.lang.Class.getDeclaredConstructors0 (нативный метод)(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.AcessproctionHortJava: 539) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) java.til.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.get.eclaredConstrulass0. Явный метод (0)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.AcessprotionHortJava: 539) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) java.til.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) java.lang.Thread.run (Thread.java:680) note Примечание Полная трассировка стека основной причины доступна в журналах Apache Tomcat / 7.0.23.

Apache Tomcat / 7.0.23

Мой код выглядит следующим образом:

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();
  }
}

** Доступ и секретные ключи удалены из кода **

То же самое касается SES.Я также попытался использовать библиотеку Java, например «typica», и все еще получаю ошибку NoClassDef.У меня есть библиотека AWS в моем пути сборки в папке библиотек, и пакет / классы jar, кажется, там.Поэтому я не уверен, почему я не могу использовать эти классы для взаимодействия с simpleDB из моего сервлета.

Я был бы очень признателен за любую помощь по этому вопросу.Мне кажется, я не совсем понимаю, как вызывать AWS SDB из веб-среды.

Спасибо.

1 Ответ

4 голосов
/ 20 января 2012

java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials указывает, что этот класс отсутствует в вашем пути к классам.Убедитесь, что файл jar, содержащий класс com.amazonaws.auth.AWSCredentials, включен в папку WEB-INF / lib вашего веб-приложения.

...