标签: tomee-7

如何在Eclipse中使用Tomcat 8.5.x和TomEE 7.x?

我需要在Eclipse中设置Tomcat 8.5.x服务器版本.当我尝试使用Eclipse GUI创建服务器时,我将Eclipse Luna作为最新版本" Apache Tomcat v8.0 "的选择.当我选择它并浏览到我的Tomcat 8.5.x服务器时,我收到此阻止错误消息:

此目录中的Apache Tomcat安装版本为8.5.0.预计将安装Tomcat 8.0.

尝试TomEE 7.x时会出现相同的错误,该内部基于Tomcat 8.5.

Eclipse Neon中,最新版本的选择是" Apache Tomcat v9.0 ",它也会出现同样的错误.甚至没有" Apache Tomcat v8.5 "选项.

有没有办法在Eclipse中使用Tomcat 8.5和TomEE 7.x?怎么样?

eclipse tomcat tomee tomee-7

89
推荐指数
4
解决办法
10万
查看次数

如何测试Java EE7 Websocket

我已经使用Java EE 7提供的api实现了一个WebSocket.此外,我已经实现了一个请求我的WebSocket没有任何问题的客户端.为了确保在执行某些代码更改时这仍然有效,我想实现测试,这些测试也可以在构建服务器上运行,例如Jenkins CI,而不仅仅是在本地.我正在使用maven.

这是我的服务器端点:

import javax.enterprise.context.ApplicationScoped;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

@ApplicationScoped
@ServerEndpoint("/example")
public class WebSocket {

    private final Set<Session> sessions = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void open(Session session) {
        sessions.add(session);
    }

    @OnClose
    public void close(Session session) {
        sessions.remove(session);
    }

    @OnError
    public void onError(Throwable error) {
        //TODO do something
    }

    @OnMessage
    public void handleMessage(String message, Session session) throws IOException {
        session.getBasicRemote().sendText("Hello "+message+"!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的客户端端点:

import javax.websocket.*;
import java.io.IOException;
import java.net.URI;

@ClientEndpoint …
Run Code Online (Sandbox Code Playgroud)

java java-ee-7 tomee java-websocket tomee-7

8
推荐指数
1
解决办法
5500
查看次数

TomEE 7上bean验证的自定义异常映射?

上下文

我们使用javax.ws.rs.ext.ExceptionMapper<Exception>注释@javax.ws.rs.ext.Provider来处理所有异常.在内部,这ExceptionMapper可以区分不同类型的异常,以确定向客户端显示哪些信息.

在这种情况下javax.validation.ConstraintViolationException,我们返回有关哪个字段无效的其他信息以及原因.

问题

我们刚刚切换TomEE 1.7.2 JAX-RSTomEE 7.0.0-SNAPSHOT webprofile.

随着TomEE 1.7.2 JAX-RS我们使用的openejb.jaxrs.providers.auto=true系统属性,我们ExceptionMapper已自动发现和使用.

随着TomEE 7.0.0-SNAPSHOT webprofile物业不再需要从汽车发现中受益.

然而,org.apache.cxf.jaxrs.validation.ValidationExceptionMapper也发现,现在作为首选ExceptionMapperjavax.validation.ConstraintViolationException.我们自己ExceptionMapper没有运行,因此客户端无法获得有关验证过程中出错的信息.

我们自己ExceptionMapper<Exception>仍处理所有其他异常.

我已经尝试过了什么

"复制"专业 ExceptionMapper

我把自己放在我的javax.ws.rs.ext.ExceptionMapper<javax.validation.ConstraintViolationException>资源旁边,希望它优先于CXF.

仍然org.apache.cxf.jaxrs.validation.ValidationExceptionMapper优先.

更新:事实证明这确实可以解决问题.我不知道为什么我的初步测试不起作用.

禁用ValidationExceptionMapper通道system.properties

在我注意到的更改日志TomEE 7.0.0-SNAPSHOT

TOMEE-1336支持自动发现的提供程序的classname.activated = true/false

看看相应的变更集我希望我可以org.apache.cxf.jaxrs.validation.ValidationExceptionMapper通过向我们添加org.apache.cxf.jaxrs.validation.ValidationExceptionMapper.activated = false来禁用它system.properties. …

java cxf bean-validation tomee tomee-7

8
推荐指数
1
解决办法
628
查看次数

Hazelcast线程阻止TomEE停止

上下文

我们希望将Hazelcast用作TomEE中的JCache实现.由于我们不需要疯狂的性能,目前我们希望将Hazelcast节点作为我们应用程序的一部分运行.

我们使用Hazelcast 3.7TomEE 7.0.1.

问题

当停止TomEE时,它WARNING - The web application [APPLICATION_NAME] appears to have started a thread named [SOMENAME] but has failed to stop it. This is very likely to create a memory leak.会多次抱怨并且VM不会正常停止但会继续运行.

解决方法显然是在它看起来空闲时立即终止进程.毋庸置疑,这正在推动我们的开发人员和开发人员疯狂.

单独的Hazelcast节点

为了排除在TomEE内部运行Hazelcast节点引起问题的可能性,我尝试启动一个独立的Hazelcast节点并将我们的应用程序更改为仅使用Hazelcast客户端连接到所述节点.行为保持不变.据我所知,在几次网络搜索中,Hazelcast客户端也会启动多个线程,与服务器节点进行通信.

没有重复的Hazelcast会阻止JVM终止

这个问题不是重复的Hazelcast阻止JVM终止,因为我们完全依赖于Hazelcasts JCache实现.我们不Hazelcast直接访问实例,因此我们无法调用shutDownAll().

测试用例

在GitHub上创建了一个小测试用例来重现这个问题.

问题

  • 我们可以在Java EE应用程序中使用Hazelcast作为JCache后端吗?
  • 我们需要做些什么来让应用程序正常停止?
  • 我们还可以将Hazelcast节点作为我们应用程序的一部分运行吗?如果不是:为什么这是一个坏主意?

java multithreading hazelcast tomee tomee-7

7
推荐指数
1
解决办法
268
查看次数

@Inject无法初始化对象

我正在使用tomee服务器来运行我的javaEE应用程序.我写了一个注入对象的过滤器.但是,该对象似乎没有实例化:

以下是我的代码:

Filter.java

@Priority(value = 2)
@Provider
@Singleton
public class Filter implements ContainerRequestFilter {


     @Inject
     private Faculty faculty;


     public void filter(ContainerRequestContext requestContext) {
         System.out.println("faculty name is :"+faculty.getFacultyName());
     }
}
Run Code Online (Sandbox Code Playgroud)

Faculty.java

import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;

public class Faculty {

    private List<String> facultyMembers;
    private String facultyName;

    @PostConstruct
    public void initialize() {
        this.facultyMembers = new ArrayList<String>();
        facultyMembers.add("Ian Schultz");
        facultyMembers.add("Diane Reyes");
        facultyName = "Computer Science";
    }

    public List<String> getFacultyMembers() {
        return facultyMembers;
    }

    public String getFacultyName() {
        return facultyName;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在获得NPE.以下是堆栈跟踪: …

java-ee cdi tomee tomee-7

5
推荐指数
0
解决办法
854
查看次数

如何覆盖 TomEE 容器内的“org.apache.cxf.stax.maxChildElements”属性值?

我有一个纯粹通过在 TomEE 7 环境中运行的注释配置的 JAX-WS Web 服务端点。基本上,被调用的方法必须返回一个List<String>包含在图形数据结构中的所有节点名称。此类请求的响应可以包含更多感谢 50k 元素。

With CXF 2.6.x this worked fine. However, when I call the WS-method under CXF 3.x (bundled in TomEE 7.x), the following exception is thrown on the server side:

org.apache.cxf.interceptor.Fault: Unmarshalling Error: Maximum Number of Child Elements limit (50000) Exceeded 
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:906)
    at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:712)
    at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:179)
    at org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:801)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1680)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1559)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1356)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:653)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) …
Run Code Online (Sandbox Code Playgroud)

stax cxf xml-parsing apache-tomee tomee-7

5
推荐指数
1
解决办法
6773
查看次数

如何在TomEE 7中使用Jackson作为JAX-RS-Client的JSON提供者而不是Johnzon?

我使用TomEE 7.0.1和Jackson 2作为JAX-RS JSON提供程序(配置openejb-jar.xml).将json发布到jax-rs服务非常有效,并使用jackson注释.

但是使用JAX-RS客户端(或cxf webclient)总是使用Johnzon,即使我将Jackson提供给Webclient.create方法也是如此.经过一些调试后,我确信TomEE会以某种方式将Johnzon添加到客户端工厂,并且不能使用其他的json消息体解析器.

这是TomEE CXF集成的错误还是我错过了什么?

java json jackson tomee tomee-7

4
推荐指数
1
解决办法
1492
查看次数

TomEE 7.0.0上ManagedScheduledExecutorService的任务内部的事务?

上下文

我想使用安排重复的后台任务ManagedScheduledExecutorService.我通过一个获得我的Runnables/Callables Instance,所以我的任务中有注入功能.

我的应用程序运行TomEE 7.0.0-SNAPSHOT webprofile.

问题

当这些任务访问数据库时,他们需要一个事务.但是,Runnable/ Callableno事务内部是活动的.

用户交易

ManagedScheduledExecutorService文档说明了这一点

如果需要事务,请使用javax.transaction.UserTransaction实例.通过使用Resource注释请求注入UserTransaction对象,可以使用UserTransaction实例(...).

但是,注入了

@Resource
private UserTransaction userTransaction;
Run Code Online (Sandbox Code Playgroud)

null在调用任务时.

无国籍豆

我采用的另一种方法是将无状态EJB注入到我的任务中,希望这会为我创建一个事务.

这导致启动时出现以下异常:

SEVERE: CDI Beans module deployment failed
java.lang.IllegalStateException: no interface to proxy for ejb StatelessEjb, is this is a MDB maybe you shouldn't use a scope?
    at org.apache.openejb.cdi.CdiEjbBean.createEjb(CdiEjbBean.java:252)
    at org.apache.openejb.cdi.CdiPlugin.getSessionBeanProxy(CdiPlugin.java:224)
    at org.apache.webbeans.container.BeanManagerImpl.getEjbOrJmsProxyReference(BeanManagerImpl.java:951)
    at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:777)
    at org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:651)
    at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:111)
    at org.apache.webbeans.inject.InjectableConstructor.createParameters(InjectableConstructor.java:109)
    at org.apache.webbeans.inject.InjectableConstructor.doInjection(InjectableConstructor.java:72)
    at …
Run Code Online (Sandbox Code Playgroud)

ejb java-ee java-ee-7 tomee tomee-7

4
推荐指数
1
解决办法
495
查看次数

NoClassDefFoundError:TomEE启动时的javax / faces / component / UIViewAction

我正在尝试将一个Web项目(中的所有JAR WEB-INF/lib)迁移到Maven Web项目(中的所有JAR pom.xml)。

该项目使用以下库:

  • JSF 2.2
  • 素颜
  • 靴子脸
  • OmniFaces

它在TomEE上运行。

TomEE启动时会出现以下错误:

NoClassDefFoundError:javax / faces / component / UIViewAction

但是,TomEE在类路径上提供了JSF2库。

这是我的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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lb</groupId>
<artifactId>XXX</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<name>XXX</name>
<description>Application XXX</description>

<url>http://XXX.fr</url>
<organization>
    <name>XXX</name>
    <url>http://XXX.fr</url>
</organization>
<inceptionYear>2016</inceptionYear>


<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <javase.version>1.7</javase.version>
    <javaee.version>7.0</javaee.version>
</properties>

<developers>
    <developer>
        <id>XXX</id>
        <name>YYY</name>
        <email>ZZZ@gmail.com</email>
    </developer>
</developers>

<build>
    <directory>${basedir}/target/${project.artifactId}-${project.version}</directory>
    <finalName>XXX</finalName>

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${javase.version}</source>
                <target>${javase.version}</target>
                <encoding>UTF-8</encoding> …
Run Code Online (Sandbox Code Playgroud)

jsf maven omnifaces tomee tomee-7

1
推荐指数
1
解决办法
983
查看次数

TomEE 7.0.2 如何禁用CXF + RS

我想将 RESTEasy 与部署到 TomEE 的 web 应用程序一起使用。如何禁用 CXF,使其不会尝试启动 REST 服务?

java cxf resteasy apache-tomee tomee-7

1
推荐指数
1
解决办法
721
查看次数