我需要在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?怎么样?
我已经使用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) 我们使用javax.ws.rs.ext.ExceptionMapper<Exception>
注释@javax.ws.rs.ext.Provider
来处理所有异常.在内部,这ExceptionMapper
可以区分不同类型的异常,以确定向客户端显示哪些信息.
在这种情况下javax.validation.ConstraintViolationException
,我们返回有关哪个字段无效的其他信息以及原因.
我们刚刚切换TomEE 1.7.2 JAX-RS
到TomEE 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
也发现,现在作为首选ExceptionMapper
的javax.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
. …
我们希望将Hazelcast用作TomEE中的JCache实现.由于我们不需要疯狂的性能,目前我们希望将Hazelcast节点作为我们应用程序的一部分运行.
我们使用Hazelcast 3.7
和TomEE 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不会正常停止但会继续运行.
解决方法显然是在它看起来空闲时立即终止进程.毋庸置疑,这正在推动我们的开发人员和开发人员疯狂.
为了排除在TomEE内部运行Hazelcast节点引起问题的可能性,我尝试启动一个独立的Hazelcast节点并将我们的应用程序更改为仅使用Hazelcast客户端连接到所述节点.行为保持不变.据我所知,在几次网络搜索中,Hazelcast客户端也会启动多个线程,与服务器节点进行通信.
这个问题不是重复的Hazelcast阻止JVM终止,因为我们完全依赖于Hazelcasts JCache实现.我们不Hazelcast
直接访问实例,因此我们无法调用shutDownAll()
.
我正在使用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.以下是堆栈跟踪: …
我有一个纯粹通过在 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) 我使用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集成的错误还是我错过了什么?
我想使用安排重复的后台任务ManagedScheduledExecutorService
.我通过一个获得我的Runnable
s/Callable
s Instance
,所以我的任务中有注入功能.
我的应用程序运行TomEE 7.0.0-SNAPSHOT webprofile
.
当这些任务访问数据库时,他们需要一个事务.但是,Runnable
/ Callable
no事务内部是活动的.
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) 我正在尝试将一个Web项目(中的所有JAR WEB-INF/lib
)迁移到Maven Web项目(中的所有JAR pom.xml
)。
该项目使用以下库:
它在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) 我想将 RESTEasy 与部署到 TomEE 的 web 应用程序一起使用。如何禁用 CXF,使其不会尝试启动 REST 服务?