Я пытаюсь добавить поддержку транзакций в свой кеш Hazelcast. Для этого я обнаружил, что у Hazelcast есть jca-rar, который дает мне фабрику соединений, которую я могу использовать. Вот что я сделал до сих пор:
- Я поместил этот файл
.rar
в свою папкуWEB-INF/lib
. - Я установил
tomee.unpack.dir = work/
в файлеsystem.properties
. Мой
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>test</groupId> <artifactId>cachetest</artifactId> <version>0.0.1</version> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <hazelcast.version>3.6.2</hazelcast.version> </properties> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.5</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <archive> <manifestEntries> <Dependencies>com.hazelcast</Dependencies> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast</artifactId> <version>${hazelcast.version}</version> </dependency> <dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast-jca</artifactId> <version>${hazelcast.version}</version> </dependency> <dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast-jca-rar</artifactId> <version>${hazelcast.version}</version> <type>rar</type> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> </dependencies> </project>
Я добавляю службу отдыха для целей тестирования.
@Path("resttest") @Stateless public class RestService { @Resource(mappedName = "hazelcast-jca-rar-3.6.2RA") private ConnectionFactory connectionFactory; @GET @Path("create") public void createGame() throws ResourceException { connectionFactory.getConnection();//ClassCastException } }
Мой web.xml:
<?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>
Мой томи.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<Deployments dir="apps" />
</tomee>
Это действительно весь код, который у меня есть в моем простом тесте, и он терпит неудачу при попытке получить соединение из фабрики соединений с помощью ClassCassException
:
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 1.7.4 и версия hazelcast 3.6.2 (как написано в pom).
tomee.xml
иweb.xml
тоже? - person ibrahim gürses   schedule 21.04.2016