无法将Dynamic Web Module部署到Glassfish服务器

时间:2018-01-17 09:12:47

标签: eclipse maven java-ee facelets glassfish-4

过去几个小时我一直在努力将动态网络模块项目部署到2台不同的Glassfish 4服务器上,其中一台在本地安装,另一台在线托管。

该项目运行良好(pom.xml和web.xml都来自以前的项目 - 这些都没有问题),即使添加了网页,直到我只为一个类添加了DAO的EJB注释。这是有问题的课程:

import java.util.ArrayList;
import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import be.helha.groupeA3.entities.Nouvelle;

@Stateless
@LocalBean
public class DAONouvelle {

    @PersistenceContext(unitName="groupeA3JTA")
    private EntityManager em;

    public DAONouvelle() {}

    public List<Nouvelle> getAllNouvelles() {
        Query q = em.createQuery("SELECT n FROM Nouvelle n");
        return new ArrayList<Nouvelle>(q.getResultList());
    }

    public Nouvelle getNouvelle(Nouvelle n) {
        Query q = em.createQuery("SELECT n FROM Nouvelle n WHERE id=:id");
        q.setParameter("id", n.getId());
        return (Nouvelle) q.getSingleResult();
    }

    public Nouvelle createNouvelle(Nouvelle n) {
        em.persist(n);
        return n;
    }

    public int deleteNouvelle(Nouvelle n) {
        Query q = em.createQuery("DELETE FROM Nouvelle n WHERE n.id=:id");
        q.setParameter("id", n.getId());
        return q.executeUpdate();
    }

    public int updateNouvelle(Nouvelle n1, Nouvelle n2) {
        Query q = em.createQuery("UPDATE Nouvelle n SET n.titre=:titre,n.description=:description,n.image=:image WHERE n.id=:id");
        q.setParameter("id", n1.getId());
        q.setParameter("titre", n2.getTitre());
        q.setParameter("description", n2.getDescription());
        q.setParameter("image", n2.getImage());
        return q.executeUpdate();

    }
}

我知道更新和删除语句可能是错误的,但这不是重点。 将此项目部署到Glassfish 4时,它抱怨无法部署项目:

2018-01-17T09:45:29.685+0100|Grave: Exception while preparing the app
2018-01-17T09:45:29.685+0100|Grave: Exception during lifecycle processing
java.lang.RuntimeException: Unable to load the EJB module. DeploymentContext does not contain any EJB. Check the archive to ensure correct packaging for C:\payara41\glassfish\domains\domain1\eclipseApps\groupeA3.
If you use EJB component annotations to define the EJB, and an ejb or web deployment descriptor is also used, please make sure that the deployment descriptor references a Java EE 5 or higher version schema, and that the metadata-complete attribute is not set to true, so the component annotations can be processed as expected
    at org.glassfish.ejb.startup.EjbDeployer.prepare(EjbDeployer.java:189)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:926)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:435)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:220)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:488)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:544)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:540)
    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:539)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:570)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:562)
    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:561)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1469)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:111)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1851)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1727)
    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:480)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:180)
    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:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
    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:593)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
    at java.lang.Thread.run(Thread.java:745)

我没有运气搜索堆栈跟踪,检查了我的web.xml版本(3.1,在另一个项目上工作)。这是web.xml fyi:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>groupeA3</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
</web-app>

persistence.xml也存在于META-INF文件夹中,适用于另一个项目(使用JTA)。

现在,通过运行maven clean编译包,它可以正常工作,我可以将它正确地部署到远程glassfish 4服务器,因此Eclipse和Maven之间的某些东西必须不同步。

在这些情况下调试真的很难,你能指导我如何解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,eclipse有自己的java编译器,它与Maven在命令行上执行Maven时使用的标准java编译器不同。

因此我建议您检查项目设置并将其与命令行java环境进行比较。

您可以输入mvn -v来获取Maven使用的java主页和版本信息,其中包含以下内容:

Apache Maven 3.5.0 
Maven home: c:\Dev\apache-maven-3.5.0\bin\..
Java version: 1.8.0_141, vendor: Oracle Corporation
Java home: c:\Program Files\Java\jdk1.8.0_141\jre
Default locale: de_CH, platform encoding: Cp1252

在Eclipse中,您可以将此信息与项目设置进行比较。