Java EE 7 EJB 3.2 Payara 4.1.1.154

Я переношу проект с Java EE 6 на Java EE 7. В качестве зависимостей у меня есть javaee 7.0, payara-embedded-all4.1.1.154
Я переношу 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">
    <interceptors>
        <class>com.myproject.business.base.util.LoggingInterceptor</class>
    </interceptors>
</beans>

Также web.xml для:

<?xml version="1.0" encoding="UTF-8"?>
<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
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <context-root>/com.myproject.business.server</context-root>
</glassfish-web-app>
1.xsd" id="WebApp_ID" version="3.1"> <display-name>com.myproject.business.server</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <login-config> <auth-method>BASIC</auth-method> <realm-name>myprojectRealm</realm-name> </login-config> <security-constraint> <display-name>Basic Protection</display-name> <web-resource-collection> <web-resource-name>REST</web-resource-name> <description /> <url-pattern>/myproject/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>PUT</http-method> <http-method>DELETE</http-method> </web-resource-collection> <auth-constraint> <description /> <role-name>com.myproject.ftc.Reader</role-name> <role-name>com.myproject.um.Administrator</role-name> <role-name>com.myproject.ftc.Skriptimporteur</role-name> <role-name>com.myproject.operations.Admin</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>com.myproject.ftc.Reader</role-name> </security-role> <security-role> <role-name>com.myproject.ftc.Exporter</role-name> </security-role> <security-role> <role-name>com.myproject.operations.Admin</role-name> </security-role> </web-app>

И заменяется sun-web.xml на glassfish-web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <context-root>/com.myproject.business.server</context-root>
</glassfish-web-app>

Все компилируется, но у меня возникла проблема, когда я хочу развернуть приложение в payara:

2016-03-09T17:16:19.466+0200|Severe: Exception during lifecycle processing
java.lang.RuntimeException: EJB Container initialization error
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:237)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:291)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:99)
    at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:206)
    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:314)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:496)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:487)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
    at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at com.myproject.exception.handler.__EJB31_Generated__ExceptionDelegate__Intf____Bean__.registerExceptionHandler(Unknown Source)
    at com.myproject.exception.handler.ExceptionDelegate.init(ExceptionDelegate.java:40)
    at com.myproject.exception.handler.ExceptionDelegate.<init>(ExceptionDelegate.java:31)
    at com.myproject.exception.handler.__EJB31_Generated__ExceptionDelegate__Intf____Bean__.<init>(Unknown Source)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at com.sun.ejb.containers.BaseContainer.instantiateOptionalEJBLocalBusinessObjectImpl(BaseContainer.java:3867)
    at com.sun.ejb.containers.AbstractSingletonContainer.initializeHome(AbstractSingletonContainer.java:216)
    at com.sun.ejb.containers.SingletonContainerFactory.createContainer(SingletonContainerFactory.java:72)
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:225)
    ... 43 more

Что также странно, так это то, что он дает мне EJB31_Generated, и я добавил maven-ejb-plugin с версией 3.2 и Payara 4.1.1.154.

Кто-нибудь знает, почему?


person Mihai Catan    schedule 10.03.2016    source источник
comment
Это дает вам EJB31_Generated, потому что вы, вероятно, ссылаетесь на EJB 3.1 в своем файле ejb-jar.xml. У вас есть @Startup бобы?   -  person aribeiro    schedule 11.03.2016
comment
У меня нет файла ejb-jar.xml. Я читал (учебник JEE7, глава 16.12), что это необязательно. У меня нет компонента @Startup. Я использую maven-ejb-plugin для указания версии ejb.   -  person Mihai Catan    schedule 13.03.2016
comment
Какие изменения вы внесли в свои EJB?   -  person aribeiro    schedule 23.03.2016
comment
Никаких изменений, просто замените javaee 6 на javaee 7, glassfish-embedded-all 3.x на payara-embedded-all и замените некоторые импорты из классов, где это было.   -  person Mihai Catan    schedule 25.03.2016
comment
Разве вы не можете попытаться сделать минимально воспроизводимый пример, чтобы сузить вашу проблему? Например, не могли бы вы попытаться воспроизвести возникшую проблему, используя только один компонент EJB?   -  person aribeiro    schedule 25.03.2016
comment
Я решил это. Собирался зарегистрировать некоторые ресурсы (извините, не могу правильно отформатировать): @ApplicationPath(project) public class RESTConfig extends Application { @Override public Set‹Class‹?›› getClasses() { final Set‹Class‹?›› resources = новый HashSet‹Class‹?››(); // Добавьте свои ресурсы. resources.add(AdminConsoleResource.class); // Добавьте дополнительные функции, такие как поддержка Multipart. resources.add(MultiPartFeature.class); возврат ресурсов; } }   -  person Mihai Catan    schedule 29.03.2016
comment
Хорошо! :) Тогда, если не возражаете, разместите свой комментарий как ответ и отметьте его как решенный.   -  person aribeiro    schedule 29.03.2016


Ответы (1)


Я решил это. Собирался зарегистрировать некоторые ресурсы:

@ApplicationPath("project") 
public class RESTConfig extends Application { 

  @Override public Set<Class<?>> getClasses() { 
    final Set<Class<?>> resources = new HashSet<Class<?>>(); // Add your resources. 

    resources.add(AdminConsoleResource.class); // Add additional features such as support for Multipart. 

    resources.add(MultiPartFeature.class); 

    return resources; 
  } 
}
person Mihai Catan    schedule 14.04.2016