Итак, после многих часов экспериментов я нашел рабочее решение:
Теперь мой pom.xml выглядит следующим образом:
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>en.testpackage</groupId>
<artifactId>mytestproject</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mytestprojectMavenWebapp</name>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>2.4.7.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext.cdi</groupId>
<artifactId>jersey-cdi1x</artifactId>
<version>2.27</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.27</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.27</version>
</dependency>
</dependencies>
<build>
<finalName>mytestproject</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<path>/</path>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>exec-war-only</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- more plugins e.g. shade plugin for my purpose -->
</plugins>
</build>
</project>
Мой src / main / webapp / WEB -INF / web.xml выглядит так:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>JerseyRESTService</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.testpackage.resource</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>JerseyRESTService</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
<resource-env-ref>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>
</web-app>
В src / main / resources / META-INF / beans.xml у меня есть:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>
В src / main /webapp/META-INF/context.xml У меня есть:
<Context>
<Resource name="BeanManager"
auth="Container"
type="javax.enterprise.inject.spi.BeanManager"
factory="org.jboss.weld.resources.ManagerObjectFactory"/>
</Context>
С помощью этой комбинации я могу избежать стеков исключений, и я думаю, что на основе зависимости jersey-cdi1x HK2 и Weld способны " сообщать друг другу.
В com.testpackage.resource у меня есть несколько классов, содержащих REST-методы.
Надеюсь, что я предлагаю рабочее (обновление до даты) решение для других пользователей, имеющих все эти проблемы с исключениями.
Предполагается создать файл uber-jar, содержащий Tomcat7, предлагающий REST-Service и использующий CDI на основе Weld.
Как правило, вы не хотите изменять файлы в экземпляре Elastic Beanstalk. Преимущество этой среды заключается в том, что вы можете раскручивать новые экземпляры по мере необходимости, и вам не нужно прикасаться к ним.
Вы можете немного настроить машины Elastic Beanstalk, используя метод ebextensions . По сути, это структура сценариев и файлов, которая дает вам возможность изменять свою среду. Тем не менее, имейте в виду, что ваш лучший способ отладки - это включить SSH в машину и посмотреть, что делают сценарии запуска. Я чувствую, что Amazon не очень хорошо задокументировал этот процесс, и наблюдать за тем, что он делает, по-прежнему проще всего.
Я использую Java Elastic Beanstalk и мне нужно изменить порт, который проксируется, с 5000 на 8080. У меня есть файл, который в моей среде заменяет существующий файл прокси. В .ebextensions/nginx/conf.d/elasticbeanstalk
в моем дистрибутивном файле Elastic Beanstalk я включаю следующее как 00_application.conf
:
#
# default is 404 - no need to allow anything else
#
location / {
return 404;
}
#
# this is our default url path prefix
#
location /integration {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Это для службы REST, которая предоставляет только /integration
. Ключ в том, что я должен был получить исходный файл от входа в систему, чтобы увидеть, как была настроена моя среда. В зависимости от типа среды Elastic Beanstalk, выбранные вами настройки могут отличаться. Например, в мире Java есть тип Tomcat и тип приложения Java, и их конфигурация сильно отличается.