首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TomEE,Hazelcast和jca-rar

TomEE,Hazelcast和jca-rar
EN

Stack Overflow用户
提问于 2016-04-20 09:00:41
回答 2查看 327关注 0票数 0

我正在尝试将事务性支持添加到Hazelcast缓存中。为了实现这一点,我发现Hazelcast有一个jca-rar,它给了我一个可以使用的连接工厂。这就是我到目前为止所做的:

  1. 我已经将这个.rar文件放到了我的WEB-INF/lib文件夹中。
  2. 我在tomee.unpack.dir = work/文件中设置了system.properties
  3. 我的pom.xml文件: 4.0.0测试cachetest 0.0.1 war UTF-8 3.6.2 ${project.artifactId} org.apache.maven.plugins maven-war-plugin2.5假com.hazelcast com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider 2.4.3 com.hazelcast hazelcast ${hazelcast.version} com.hazelcast hazelcast-jca ${hazelcast.version} com.hazelcast hazelcast-jca-rar ${hazelcast.version} rar javaee 6.0提供
  4. 我为测试添加了一个rest服务。 @Path("resttest") @无状态公共类RestService { @Resource(mappedName = "hazelcast-jca-rar-3.6.2RA")私有ConnectionFactory connectionFactory;@GET @Path(“创建”)公共无效createGame()抛出ResourceException {ResourceException}}

我的web.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <display-name>Cachetest</display-name>

    <session-config>
        <session-timeout>90</session-timeout>
    </session-config>

</web-app>

我的tomee.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<tomee>

    <Deployments dir="apps" />
</tomee>

这实际上是我在简单测试中拥有的所有代码,当尝试使用ClassCassException从连接工厂获得连接时,它会失败。

代码语言:javascript
复制
INFO: HZ Connection Event <<FACTORY_INIT>> for hazelcast.ManagedConnectionFactoryImpl [1] in thread [http-bio-8080-exec-7]
java.lang.Exception: Hz Connection Event Call Stack
    at com.hazelcast.jca.ManagedConnectionFactoryImpl.logHzConnectionEvent(ManagedConnectionFactoryImpl.java:167)
    at com.hazelcast.jca.ManagedConnectionFactoryImpl.createConnectionFactory(ManagedConnectionFactoryImpl.java:91)
    at com.hazelcast.jca.ManagedConnectionFactoryImpl.createConnectionFactory(ManagedConnectionFactoryImpl.java:44)
    at org.apache.openejb.core.ConnectorReference.getObject(ConnectorReference.java:50)
    at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:175)
...
SEVERE: EjbTransactionUtil.handleSystemException: com.sun.proxy.$Proxy114 cannot be cast to com.hazelcast.jca.HazelcastConnectionImpl
java.lang.ClassCastException: com.sun.proxy.$Proxy114 cannot be cast to com.hazelcast.jca.HazelcastConnectionImpl
    at com.hazelcast.jca.ConnectionFactoryImpl.getConnection(ConnectionFactoryImpl.java:89)
    at com.hazelcast.jca.ConnectionFactoryImpl.getConnection(ConnectionFactoryImpl.java:79)
    at com.hazelcast.jca.ConnectionFactoryImpl.getConnection(ConnectionFactoryImpl.java:36)

有人知道为什么会这样吗?我会错过某种配置吗?

我的TomEE versjonI1.7.4和hazelcast versjon3.6.2(用pom编写)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-25 18:53:32

这很糟糕。简而言之,你有麻烦了。

错误描述非常清楚: JDK动态代理不能转换为类。这是一种预期的行为,因为JDK代理只能实现接口。这是一个特定于TomEE的问题,因为大多数主要的应用程序服务器供应商都使用具有类支持的自定义代理技术(JBoss JDK协助、Spring等),而TomEE则使用JDK代理。TomEE承认这个问题,但他们说“不太可能很快解决”。有关进一步信息,请参见那里

Hazelcast在这里失败的原因是,他们将连接对象转换到它的implementation,,而不是接口(参见来源)。对于内部代码来说,这种行为并没有什么犯罪行为,但有时它并不有用。

现在,说到实际的部分。我看不出有任何可能“通过配置”来修复它。如果您已经准备好修补Hazelcast RA,那么您可以使用基于接口的类转换或者使用DissociatableManagedConnection,在这种情况下会提到它非常方便。

代码语言:javascript
复制
public class HazelcastManagedConnectionImpl extends JcaBase 
            implements ManagedConnection, LocalTransaction, 
            LocalTransaction, DissociatableManagedConnection {

      @Override
      public void dissociateConnections() throws ResourceException {
            conn = null;
      }
...
}

但是,实际上,我建议您重新考虑应用程序服务器的选择。托梅的市场份额很小,不是没有原因:它使用自己的容器,几乎所有的东西,这使得它的开发人员很难保持在最新的状态。Wildfly可能是一个很好的选择(至少第9个版本相当稳定,我的资源适配器在其中工作得很好)。

票数 1
EN

Stack Overflow用户

发布于 2016-05-02 21:09:54

打开了一个关于那个https://github.com/hazelcast/hazelcast-ra/issues/3的问题。修复哈泽尔卡斯特方面是微不足道的,所以希望情况会如此。

编辑: fix已集成

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36738742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档