【问题标题】:Errai 4 running on Tomcat [closed]Errai 4 在 Tomcat 上运行 [关闭]
【发布时间】:2026-02-06 11:35:01
【问题描述】:

我正在尝试让 Errai 4.0.0.Beta1 在 Tomcat 中运行,我想知道以前是否有人这样做过?具体来说,我正在尝试确定可以从 Errai(即 Wildfly)中删除哪些依赖项,以及在 Tomcat 上运行 Errai 应用程序所需的任何其他步骤。

当我开始运行时,我会更新这篇文章。

提前致谢。

【问题讨论】:

  • 你的目标是哪个版本的Tomcat?
  • 我的目标是 Tomcat 7。

标签: tomcat errai gwt-2.8 errai-4


【解决方案1】:

为了展示如何在 Tomcat 服务器上运行 Errai 4 Maven 项目,我在 GitHub 上创建了一个名为 errai-tutorial-tomcat 的项目。

先决条件

您的 Errai webapp 必须安装在本地 Maven 存储库 ( mvn install )

新建一个 Maven 项目(war 打包)并导入你之前的 webapp

例如:错误教程 (https://github.com/errai/errai-tutorial)

    <dependency>
        <groupId>org.jboss.errai.demo</groupId>
        <artifactId>errai-tutorial</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <type>war</type>
    </dependency>

添加 Tomcat 缺少的依赖项

  1. 焊接 Servlet 核心 (https://docs.jboss.org/weld/reference/2.3.4.Final/en-US/html/environments.html#weld-servlet)

    <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet-core</artifactId>
        <version>2.3.4.Final</version>
    </dependency>        
    
  2. Jersey JAX-RS 核心 Servlet 2.x 实现

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.23.1</version>
    </dependency>
    
  3. Java Persistence 2.0 (JSR 317) API 的 Hibernate 定义。

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.1.Final</version>
    </dependency>
    

在 Web.xml 文件中添加 Weld Servlet 监听器

<listener>
  <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>

在 Web.xml 文件中添加 BeanManager 引用

<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.xml 文件中添加 Jersey JAX-RS 核心 Servlet

<servlet> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <servlet-name>javax.ws.rs.core.Application</servlet-name> 
    <load-on-startup>2</load-on-startup> 
</servlet>

在 META-INF 目录下添加 context.xml 文件

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

    <Resource name="BeanManager"
                  auth="Container"
                  type="javax.enterprise.inject.spi.BeanManager"
                  factory="org.jboss.weld.resources.ManagerObjectFactory"/>

</Context>

【讨论】:

  • 你的这个实现/配置是否完全支持 Errai 功能,例如带有接口和实现类的 BUS、JAX-RS,其中路由(@GET @POST @Path)仅在接口声明中?这是否支持事件跨服务器 - 客户端。我在 tomcat 上运行了多模块 maven 项目,但无法使这些东西正常工作。现在我在努力切换到 Wildfly,但到目前为止也没有成功。
  • 托管在 Github 上的演示应用程序代码现在可以使用 Errai 客户端总线向服务器发送消息:github.com/stbland/test-errai4-tomcat
【解决方案2】:

为了展示如何在 Tomcat 服务器(7.x 或 8.x)上运行 Errai 4 (4.1.3.Final) Maven 项目,我创建了另一个在 GitHub 上从头开始项目,名为 test-errai4-tomcat

现在,它显示一个简单的表单,可以:

  • 使用 Errai 客户端总线向服务器发送消息。
  • 使用 Errai JAX-RS 调用 REST 服务

【讨论】: