Configure and deploying a basic JCA ResourceAdapter
We can configure and deploy a basic Java EE Connector Architecture (JCA) ConnectionFactory and Resource Adapter.
We can install a resource adapter and configure instances of the resources it provides. This task uses an example resource adapter called ExampleRA.rar, which provides 3 types of resources: a connection factory and two types of administered objects.
- Enable the JCA feature in server.xml. The server.xml file is found at [path_to_liberty\wlp\usr\servers\server_name]
<server> <featureManager> <feature>jca-1.6</feature> <feature>servlet-3.0</feature> </featureManager> </server>
- Place the resource adapter RAR file (ExampleRA.rar) into the dropins folder of the server. If the server is running, we will the following message in the console log indicating that the resource adapter has been installed:
[AUDIT ] J2CA7001I: Resource adapter ExampleRA installed in 1.306 seconds.
- Inspect the deployment descriptor, annotations, and other documentation from the resource adapter to identify which types of resources the adapter provides and the configuration properties that each adapter accepts. The example resource adapter, ExampleRA.rar, has this information in the ra.xml deployment descriptor. The ra.xml file is found at [path_to_ExampleRA\ExampleRA\META-INF.] The deployment descriptor identifies 3 types of resources we can configure.
<connection-definition> <managedconnectionfactory-class>com.ibm.example.jca.adapter.ManagedConnectionFactoryImpl</managedconnectionfactory-class> <config-property> <config-property-name>tableName</config-property-name> <config-property-type>java.lang.String</config-property-type> </config-property> <connectionfactory-interface>javax.resource.cci.ConnectionFactory</connectionfactory-interface> ... </connection-definition> <adminobject> <adminobject-interface>javax.resource.cci.ConnectionSpec</adminobject-interface> <adminobject-class>com.ibm.example.jca.adapter.ConnectionSpecImpl</adminobject-class> <config-property> <config-property-name>readOnly</config-property-name> <config-property-type>java.lang.Boolean</config-property-type> <config-property-value>false</config-property-value> </config-property> </adminobject> <adminobject> <adminobject-interface>javax.resource.cci.InteractionSpec</adminobject-interface> <adminobject-class>com.ibm.example.jca.adapter.InteractionSpecImpl</adminobject-class> <config-property> <description>Function name. Supported values are: ADD, FIND, REMOVE</description> <config-property-name>functionName</config-property-name> <config-property-type>java.lang.String</config-property-type> </config-property> </adminobject>
- In server.xml, configure instances of the available resource types.
<server> <featureManager> <feature>jca-1.6</feature> <feature>servlet-3.0</feature> </featureManager> <connectionFactory jndiName="eis/conFactory"> <properties.ExampleRA tableName="TABLE1"/> </connectionFactory> <adminObject jndiName="eis/conSpec"> <properties.ExampleRA.ConnectionSpec/> </adminObject> <adminObject jndiName="eis/iSpec_ADD"> <properties.ExampleRA.InteractionSpec functionName="ADD"/> </adminObject> <adminObject jndiName="eis/iSpec_FIND"> <properties.ExampleRA.InteractionSpec functionName="FIND"/> </adminObject> </server>- Use resource injection to access the resources in your servlet; for example:
@Resource(lookup = "eis/conFactory") private ConnectionFactory conFactory; @Resource(lookup = "eis/conSpec") private ConnectionSpec conSpec; @Resource(lookup = "eis/iSpec_ADD") private InteractionSpec iSpec_ADD; @Resource(lookup = "eis/iSpec_FIND") private InteractionSpec iSpec_FIND; ... MappedRecord input = conFactory.getRecordFactory().createMappedRecord("input"); input.put("city", "Rochester"); input.put("state", "Minnesota"); input.put("population", 106769); Connection con = conFactory.getConnection(conSpec); try { Interaction interaction = con.createInteraction(); interaction.execute(iSpec_ADD, input); interaction.close(); } finally { con.close(); }We must enable the JNDI feature in server.xml to look up the resources from the namespace rather than using injection.
Subtopics
Overview of JCA configuration elements
The Java Platform, Enteprise Edition Connector Architecture (JCA) feature provides configuration elements to define instances of connection factories, administered objects, and activation specifications, and to associate these instances with an installed resource adapter. Each of the JCA configuration elements consists of two basic parts, a top-level element and a subelement, both of which are required for the configured instance.
Parent topic: Administer the Liberty profile manually