Hazelcast can be integrated into J2EE containers via Hazelcast Resource Adapter ( hazelcast-ra.rar ). After proper configuration, Hazelcast can participate in standard J2EE transactions.
<%@page import="javax.resource.ResourceException" %> <%@page import="javax.transaction.*" %> <%@page import="javax.naming.*" %> <%@page import="javax.resource.cci.*" %> <%@page import="java.util.*" %> <%@page import="com.hazelcast.core.Hazelcast" %> <% UserTransaction txn = null; Connection conn = null; Queue queue = Hazelcast.getQueue ("default"); Map map = Hazelcast.getMap ("default"); Set set = Hazelcast.getSet ("default"); List list = Hazelcast.getList ("default"); try { Context context = new InitialContext(); txn = (UserTransaction) context.lookup("java:comp/UserTransaction"); txn.begin(); ConnectionFactory cf = (ConnectionFactory) context.lookup ("java:comp/env/HazelcastCF"); conn = cf.getConnection(); queue.offer("newitem"); map.put ("1", "value1"); set.add ("item1"); list.add ("listitem1"); txn.commit(); } catch (Throwable e) { if (txn != null) { try { txn.rollback(); } catch (Exception ix) {ix.printStackTrace();}; } e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (Exception ignored) {}; } } %>
Deploying and configuring Hazelcast resource adapter is no different than any other
resource adapter since it is a standard
JCA
resource adapter but
resource adapter installation and configuration is container specific, so please consult
your J2EE vendor documentation for details. Most common steps are:
Add the
hazelcast.jar
to container's classpath. Usually
there is a lib directory that is loaded automatically by the container on
startup.
Deployhazelcast-ra.rar
. Usually there is a some kind of
deploy directory. Name of the directory varies by container.
Make container specific configurations when/after
deployinghazelcast-ra.rar
. Besides container specific
configurations,
JNDI
name for Hazelcast resource is
set.
Configure your application to use the Hazelcast resource. Updating
web.xml
and/or
ejb-jar.xml
to let
container know that your application will use the Hazelcast resource and
define the resource reference.
Make container specific application configuration to specify
JNDI
name used for the resource in the application.
Place the
hazelcast-<version>.jar
into
GLASSFISH_HOME/glassfish/domains/domain1/lib/ext/
directory.
Place the
hazelcast-ra-<version>.rar
into
GLASSFISH_HOME/glassfish/domains/domain1/autodeploy/
directory
Add the following lines to the
web.xml
file.
<resource-ref> <res-ref-name>HazelcastCF</res-ref-name> <res-type>com.hazelcast.jca.ConnectionFactoryImpl</res-type> <res-auth>Container</res-auth> </resource-ref>
Notice that we didn't have to put
sun-ra.xml
into the
rar file because it comes with the
hazelcast-ra-<version>.rar
file already.
If Hazelcast resource is used from EJBs, you should configure
ejb-jar.xml
for resource reference and
JNDI
definitions, just like we did forweb.xml
.
Place the
hazelcast-<version>.jar
into
JBOSS_HOME/server/deploy/default/lib
directory.
Place the
hazelcast-ra-<version>.rar
into
JBOSS_HOME/server/deploy/default/deploy
directory
Create a
hazelcast-ds.xml
at
JBOSS_HOME/server/deploy/default/deploy
directory
containing the following content. Make sure to set the
rar-name
element
tohazelcast-ra-<version>.rar
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE connection-factories
PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
"http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
<connection-factories>
<tx-connection-factory>
<local-transaction/>
<track-connection-by-tx>true</track-connection-by-tx>
<jndi-name>HazelcastCF</jndi-name>
<rar-name>hazelcast-ra-<version>.rar</rar-name>
<connection-definition>
javax.resource.cci.ConnectionFactory
</connection-definition>
</tx-connection-factory>
</connection-factories>
Add the following lines to the
web.xml
file.
<resource-ref> <res-ref-name>HazelcastCF</res-ref-name> <res-type>com.hazelcast.jca.ConnectionFactoryImpl</res-type> <res-auth>Container</res-auth> </resource-ref>
Add the following lines to the
jboss-web.xml
file.
<resource-ref> <res-ref-name>HazelcastCF</res-ref-name> <jndi-name>java:HazelcastCF</jndi-name> </resource-ref>
If Hazelcast resource is used from EJBs, you should configure
ejb-jar.xml
and
jboss.xml
for resource
reference and
JNDI
definitions.