You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Kai Wei <we...@gmail.com> on 2006/06/02 00:28:38 UTC
Embedded Tomcat does not read META-INF/context.xml?
I'm running Tomcat 5.5.7 in embedded mode, i.e., starting Tomcat using
the org.apache.catalina.startup.Embedded class. For some reason, the
JNDI resource I configured in
$tomcat_home/webapps/my_webapp/META-INF/context.xml is not created
when Tomcat starts. Your help will be greatly appreciated!!
The following is the code that I use for starting Tomcat:
Embedded tomcat = new Embedded();
// create an Engine
Engine catalina = tomcat.createEngine();
catalina.setName("Catalina");
catalina.setDefaultHost("localhost");
// create Host
StandardHost localhost = (StandardHost)
tomcat.createHost("localhost", "webapps");
// add host to Engine
catalina.addChild(localhost);
// create application Context
StandardContext appCtx = (StandardContext)
tomcat.createContext("/gc", "gc");
// make the web app's class loader use the normal delegation
model to search for classes
appCtx.setDelegate(true);
// add context to host
localhost.addChild(appCtx);
// add new Engine to set of Engine for embedded server
tomcat.addEngine(catalina);
// create HTTP Connector
Connector httpConnector =
tomcat.createConnector((java.net.InetAddress)null, 8080, false);
IntrospectionUtils.setProperty(httpConnector, "redirectPort", "8443");
// add new Connector to set of Connectors for embedded server,
associated with Engine
tomcat.addConnector(httpConnector);
// create HTTPS Connector
Connector httpsConnector =
tomcat.createConnector((java.net.InetAddress)null, 8443, true);
httpsConnector.setScheme("https");
IntrospectionUtils.setProperty(httpsConnector, "sslProtocol", "TLS");
IntrospectionUtils.setProperty(httpsConnector, "keypass", "changeit");
IntrospectionUtils.setProperty(httpsConnector, "keystore",
"emf.keystore");
// add new Connector to set of Connectors for embedded server,
associated with Engine
tomcat.addConnector(httpsConnector);
// start operation
try {
tomcat.start();
} catch (org.apache.catalina.LifecycleException ex) {
ex.printStackTrace();
}
As you can see from the code, we have one web app called "gc" running
inside Tomcat. Under the $tomcat_home/webapps/gc directory, we have a
META-INF/context.xml file that defines one JNDI resource (a
javax.sql.DataSource object):
<Context docBase="gc"
path="/gc"
crossContext="true" reloadable="true" debug="1"
workDir="work/Catalina/localhost/gc">
<Resource
name="jdbc/gc"
auth="Container"
description="GC DataSource Reference"
type="javax.sql.DataSource"
factory="com.good.gc.common.util.GCTomcatDataSourceFactory"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/gc"
username="postgres"
maxIdle="2"
maxWait="-1"
maxActive="4"
validationQuery="select now()"
/>
</Context>
We use the Spring Framework (version 1.2.3 I believe) for the gc
webapp, and inside the spring context config file, we try to grab the
DataSource from the java:comp/env context this way:
<bean id="myDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:/comp/env/jdbc/gc</value>
</property>
</bean>
Everything used to work just fine when we used Tomcat in standalone
mode. But now that we switched to embedded mode, we got the following
error when starting Tomcat up:
2006-06-01 15:02:15,448 ERROR main org.apache.catalina.core.ContainerBase.[Catal
ina].[localhost].[/gc] - Exception sending context initialized event to listener
instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean wi
th name 'myDataSource' defined in ServletContext resource [/WEB-INF/springContex
tConfig.xml]: Initialization of bean failed; nested exception is javax.naming.Na
mingException: Cannot create resource instance
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(Resour
ceEnvFactory.java:113)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:3
04)
at org.apache.naming.NamingContext.lookup(NamingContext.java:792)
at org.apache.naming.NamingContext.lookup(NamingContext.java:139)
at org.apache.naming.NamingContext.lookup(NamingContext.java:780)
at org.apache.naming.NamingContext.lookup(NamingContext.java:139)
at org.apache.naming.NamingContext.lookup(NamingContext.java:780)
at org.apache.naming.NamingContext.lookup(NamingContext.java:139)
at org.apache.naming.NamingContext.lookup(NamingContext.java:780)
at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:136)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java
:123)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:85)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:121)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport
.java:71)
at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.j
ava:85)
at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(Jnd
iObjectFactoryBean.java:124)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:937)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:334)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:146)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.
preInstantiateSingletons(DefaultListableBeanFactory.java:271)
at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:310)
at org.springframework.web.context.support.AbstractRefreshableWebApplica
tionContext.refresh(AbstractRefreshableWebApplicationContext.java:133)
at org.springframework.web.context.ContextLoader.createWebApplicationCon
text(ContextLoader.java:230)
at org.springframework.web.context.ContextLoader.initWebApplicationConte
xt(ContextLoader.java:156)
at org.springframework.web.context.ContextLoaderListener.contextInitiali
zed(ContextLoaderListener.java:48)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContex
t.java:3729)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
187)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442
)
at org.apache.catalina.startup.Embedded.start(Embedded.java:821)
at com.good.emf.TomcatStarter.main(TomcatStarter.java:160)
Looks like Spring cannot obtain the DataSource object from
java:comp/env/jdbc/gc, so I'm suspecting the embedded Tomcat does not
read META-INF/context.xml at all. How can I get this to work?
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org