27 Jan 2018

Running ADF Essentials on Tomcat in a Docker container

I develop sample applications pretty often. I try out some ideas, play with some techniques and share the result of my investigations with my colleagues and blog readers by the means of sample applications. When someone wants to see how the technique was implemented they just look into the source code and that's enough to get the idea. But if they want to see how it actually works and play with it, they need to find the right version of JDeveloper, start it, run the sample application and, probably, dance a little with a tambourine to get it working. Too complicated and not fun. What would be fun is to have a lightweight Docker container with deployed sample application which everyone can easily run on their Docker environment. In this post I am going to show what I did to create a preconfigured docker-image-template which I will use to create images with deployed sample applications.

Since the key is to have a lightweight container and since my sample ADF applications rarely go beyond essentials functionality I decided to create a Docker container running Tomcat with ADF Essentials on top of that.

So, let's start:

1. Pull and run Tomcat image from Docker hub:

docker run -it -p 8888:8080 --name adftomcat tomcat:8.0 

Having done that, you would be able to observe the running Tomcat here http://localhost:8888.

2. Install the latest Java in the container:

In a separate terminal window dive into the container:
docker exec -it adftomcat bash


And install Java:
apt-get update
apt-get install software-properties-common 
add-apt-repository "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main"
apt-get update 
apt-get install oracle-java8-installer  

3. Download ADF Essentials (including client) from Oracle Website

This will give you to archives: adf-essentials.zip and adf-essentials-client-ear.zip. Copy them in the container:

docker cp ~/Downloads/adf-essentials.zip adftomcat:/usr/local/tomcat/lib
docker cp ~/Downloads/adf-essentials-client-ear.zip adftomcat:/usr/local/tomcat/lib

Go to the container (docker exec -it adftomcat bash) and unzip them with -j option:

unzip -j  /usr/local/tomcat/lib/adf-essentials.zip
unzip -j  /usr/local/tomcat/lib/adf-essentials-client-ear.zip

4. Download javax.mail-api-1.4.6.jar from here and copy it into the container:

docker cp ~/Downloads/javax.mail-api-1.4.6.jar adftomcat:/usr/local/tomcat/lib

5. Install nano text editor in the container:

apt-get install nano


6. In the container create setenv.sh file in /usr/local/tomcat/bin folder:

nano /usr/local/tomcat/bin/setenv.sh


With the following content:


JAVA_HOME=/usr/lib/jvm/java-8-oracle
CATALINA_OPTS='-Doracle.mds.cache=simple -Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true'


7. In the container update  /usr/local/tomcat/conf/context.xml file:


nano /usr/local/tomcat/conf/context.xml

And add the following line in the <Context> section

<JarScanner scanManifest="false"/>

8. Basically, this is enough to deploy an ADF application to the container. I created an image out of this preconfigured container for future uses as a template. 

docker commit adftomcat efedorenko/adftomcat

9. Develop a "Tomcat-compatable" sample ADF application (check Chandresh's blog describing how to create an ADF application suitable for Tomcat). Deploy it to a war and copy the war into the container:

docker cp tcatapp.war adftomcat:/usr/local/tomcat/webapps

10. Restart the container

docker stop adftomcat
docker start -I adftomcat

11. Check the application availability here http://localhost:8888/MY_CONTEXT_ROOT/faces/main.jsf


12. Now we can create an image out of this container, run it in a docker cloud or just share it with your colleagues so they can run it wherever they prefer.


That's it!


No comments:

Post a Comment

Post Comment