Automating Integration Tests with WebSphere Liberty and Maven

I spent some hours to figure out how to deploy my webapp to the Liberty from my Maven project.

I looked into the feature restConnector-1.0 . restConnector provides a REST based JMX MBeans interface to WebSphere Liberty.  You add  <feature>restConnector-1.0</feature> to your server, and make sure you have a user set in the admin role.


You need to add write access for the administrator-role user.  You’ll need to specify a relative path (use the Liberty Directory Locations) or use the absolute path (it’s a bit more complicated).


You can login and see the various APIs [ https://localhost:9443/IBMJMXConnectorREST/api ] or check the documentation [API1][API2][MBean]  .  You’ll want to check any upload with https://localhost:9443/IBMJMXConnectorREST/file/status

I used it with maven-antrun-plugin to execute against curl.

 <target name="post-war-to-server" unless="maven.test.skip">
 <!-- Remove War File from the Server -->
 <exec executable="curl">
 line="-u 'admin:dmin' -H 'Content-Type: application/war' -X DELETE 'https://localhost:9443/IBMJMXConnectorREST/file/%24%7Bserver.output.dir%7D%2Fdropins%2Ftransformation.war?recursiveDelete=true' 
 --insecure -v" />
 <!-- Should check that this is a 204 -->
 <!-- Post the War file to the Server -->
 <!-- Expand the War file on the Server -->
 <exec executable="curl">
 line="-u 'admin:admin' -H 'Content-Type: application/war' -X POST 'https://localhost:9443/IBMJMXConnectorREST/file/%24%7Bserver.output.dir%7D%2Fdropins%2Ftransformation.war?expandOnCompletion=true' 
 --data-binary '@target/example.war' --insecure -v" />


Execute maven with mvn clean integration-test package in order to trigger the deployment during the integration-test.

JAX-RS Mapping All ClientExceptions with ExceptionMappers

As many of you know, I have been working with JAX-RS and WebSphere Liberty for a few years now. Somehow, after this time has passed, I still seem to uncover new JAX-RS capabilities.

For those familiar with JAX-RS, you know it generates some funky errors. I wanted to control the data in the response. I started looking at Servlet Filters, however, by the time you get the response it’s fully committed. I started looking at JAX-RS filters and exception handlers. I found ExceptionMapper and ClientErrorException. The WebSphere Liberty documentation includes a good overview.

I implemented the ExceptionMapper and set a custom response. You could add any of these exceptions – BadRequestException, ForbiddenException, NotAcceptableException, NotAllowedException, NotAuthorizedException, NotFoundException, NotSupportedException. I also added the @Provider annotation to the top of the class, and added a reference in the Application declaration.

I hope you all find this useful. Thanks!

Automation of IIB Maven and Ant

I have been working on a project with IIB (IBM Integration Bus). If you are like me, you want to automate all those pesky build tasks. In IIB, I needed to package and build my project (BAR).

I investigated scripting the build using the mqsipackagebar command . I noticed at the bottom a description of using it with ANT.

I’ve used ANT in a few projects (in combination with Maven). I took the script as a starting point, added the jar files and property files (based on configuring environments without IIB). I configured the maven-antrun-plugin in order to integrate within my parent project’s maven build.

Here is some sample code for you, I hope it helps you all get started:

Mysterious Entry in my Swagger Doc

Recently, I’ve been working with Swagger to document my team’s APIs, and had a mysterious entry popup (default/entity). It looks something like this:


I threw some tracing into action:

[6/7/16 7:51:24:912 EDT] 00000039 id= io.swagger.jaxrs.utils.ReaderUtils < collectParameters Exit 
[6/7/16 7:51:24:912 EDT] 00000039 id= io.swagger.jaxrs.utils.ReaderUtils < collectFieldParameters Exit 
[6/7/16 7:51:24:912 EDT] 00000039 id= io.swagger.jaxrs.utils.ReflectionUtils > isOverriddenMethod Entry 
[6/7/16 7:51:24:912 EDT] 00000039 id= io.swagger.jaxrs.utils.ReflectionUtils > isOverriddenMethod Entry 
[6/7/16 7:51:24:912 EDT] 00000039 id= io.swagger.jaxrs.utils.ReflectionUtils > isOverriddenMethod Entry 

I had too broad a dependency in my Maven pom.xml. I switched from eclipselink to org.eclipse.persistence.jpa.


The swagger entries disappeared from my swagger.yaml and it’s subsequent view.   I hope this helps.

Localized Maven Repositories – A Hot Tip

I’ve been building a Maven Project that uses some jar files which are not in Maven Central (or any repository). I ran across this article – Local Maven Dependencies. I found it very helpful.

Simply, do the following:

create a directory (d:/folder/repo)

Run a maven deploy to url (it’ll create the repository details based on the flags)

mvn deploy:deploy-file -Durl=file://d:/folder/repo/ -Dfile=Common.jar -DgroupId=xyz -DartifactId=Common -Dpackaging=jar -Dversion=1.0

and add to your Maven Project’s POM
<id>Local Repository</id>

Then reference your jar file with a new dependency.

The code should almost write itself from there 🙂

IBM Integration Broker with ODBC and ESQL

To setup ODBC bridge from IBM Integration Broker to DB2, download and install the ODBC bridge from the IBM Data Server Runtime Clients.  It’s a 1.3 G download, and you only need about a 40M file for your system.

The installation is straight foward.  Be prepared to click Next, and Finish.

Setup the ODBC bridge and IIB

Start > Run

      Type ODBC
      Click on Data Sources
      Click on Configure ODBC
 Database name

call the alias as SAMPLE

      Launch a Command prompt
      Start > Run
      change directory to server\bin
      Launch iib
      C:\Program Files\IBM\IIB\\server\

bin>mqsisetdbparms.exe TESTNODE_cheetah -n SAMPLE -u db2admin -p fakepass!

      BIP8071I: Successful command completion.
      TESTNODE_cheetah should be your local node in Eclipse.
        you’ll want to restart the Node (you can look in the lower right of your toolkit)
      Right Click the Node
      Then Start

To Read Data, the ESQL is easy:

        You can then send a message using the IIB tests , and confirm using your database db2 select * from DB2ADMIN.EMPLOYEE.


To Write Data:

      Repeat the project with the following:
      Create a New Input Message with

"EMPNO" : "2229",
"FIRSTNME" : "Paul",
"JOB" : "PRES",
"EDLEVEL" : 18

IBM Integration Broker – Setting up DB2 JDBC Access

I have been working IBM Integration Broker

I found it hard to find concise documentation (read as fast) on setting up/creating a new provider

mqsicreateconfigurableservice TESTNODE_cheetah -c JDBCProviders -o DB2Two -n connectionUrlFormat -v "jdbc:db2://[serverName]:[portNumber]/[databaseName]:user=[user];password=[password];"

mqsisetdbparms TESTNODE_cheetah -n jdbc::employeeIdentity -u db2admin -p passw0rd1940!

mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n securityIdentity -v employeeIdentity
 mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n portNumber -v 50000
 mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n serverName -v
 mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n databaseType -v DB2
 mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n databaseName -v SAMPLE
 mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n jarsURL -v c:\db2jars

mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n type4DatasourceClassName -v
 mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n type4DriverClassName -v

mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n databaseVersion -v 10.1
 mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n environmentParms -v ""

mqsichangeproperties TESTNODE_cheetah -c JDBCProviders -o DB2Two -n jdbcProviderXASupport -v true

Restart the Integration Server

I referenced this

You can use a Java Compute node to access the data.

Further details…