In order for me to establish a JNDI connection in Tomcat, I have the data source declare inside
server.xml as shown in the code snippet below:
And then I have the JNDI data source declared in Spring like this:
Let’s do some experiment on
maven-war-plugin, if this plugin went missing, an error message mention
Name [comp/env] is not bound in this Context. Unable to find [comp]. as shown in the following stack trace could be seen:
javax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context. Unable to find [comp].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.catalina.deploy.NamingResources.cleanUp(NamingResources.java:988)
at org.apache.catalina.deploy.NamingResources.stopInternal(NamingResources.java:970)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5495)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
If the plugin were there (as shown in following code snippet) but without any configuration being done, the above error message could be seen too.
org.apache.maven.plugins
maven-war-plugin
2.2
Now if
<outputDirectory> is configure to the plugin as shown in following code snippet:
org.apache.maven.plugins
maven-war-plugin
2.2
${project.basedir}/target/tomcat/webapps
Tada! It works. Now change to use
<warSourceDirectory> in the configuration as shown in following code snippet and start up the Tomcat, the same error could be seen as well.
org.apache.maven.plugins
maven-war-plugin
2.2
${project.basedir}/src/main/webapp/
Try make some adjustment to the
docBase attribute of
<Context> in
server.xml as shown in following code snippet, it will works again.
...
What a surprise?! If I pay close attention on the stack trace, I would notice
MyService folder wasn’t there actually as mention in another message trace as shown in below:
java.lang.IllegalArgumentException: Document base C:\MyService\target\tomcat\webapps\MyService does not exist or is not a readable directory
at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:140)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4906)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5086)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Another message I got was whenever Maven build is trigger, Maven will expect the output to be deploy into
target/tomcat/webapps folder. Since I didn’t configure
<outputdirectory> in
POM.xml, then Maven will go for the default path searching my web app. By adjusting the
docBase attribute 2 lever up will tell Maven "Hey! go search my app there".