小编Sch*_*ser的帖子

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
查看次数

DataStax Java驱动程序可以安全地用在EE容器中吗?

com.datastax.driver.core.Session该类的文档说明了这一点

(...)每个会话维护与群集节点的多个连接(...)

但是,对EE环境的一般建议是将池和线程管理留给容器.

在我看来,DataStax驱动程序(主要不是针对EE环境)违反了这一规则.这让我担心驱动程序是否可以在我的EE应用程序中安全使用.

java java-ee cassandra datastax-java-driver

7
推荐指数
2
解决办法
464
查看次数

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
查看次数

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
查看次数