私の Web アプリケーションには、2 つの Postgresql DB 上の 2 つのデータソース (principalDB と backupDB) があり、それらのための Web コンテナー管理のトランザクション マネージャー (Atomikos を使用) があります。Spring FW と Hibernate は、アプリケーションの構成要素です。私が直面している問題は、Jetty 6.1.3 Web コンテナーが、リソースを宣言するアプリ固有の WEB-INF/jetty-env.xml をロードしていないように見えるため、例外が発生することです。
原因: javax.naming.NameNotFoundException; 残りの名前「env/jdbc/principalDB」 org.mortbay.naming.NamingContext.lookup (NamingContext.java:634) で org.mortbay.naming.NamingContext.lookup (NamingContext.java:665) で org.mortbay.naming.NamingContext.lookup (NamingContext.java:680) で org.mortbay.naming.java.javaRootURLContext.lookup (javaRootURLContext.java:112) で javax.naming.InitialContext.lookup(InitialContext.java:351) で org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155) で org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88) で org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:153) で org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178) で org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) で org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) で org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:200) で org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:186) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1368) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334) で ... 43 以上
2つのデータソースを構成する方法は次のとおりです
で、
WEB-INF/web.xml
resource-ref を使用して 2 つのリソースを次のように宣言しました。<resource-ref> <description>The principal datasource</description> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-ref-name>jdbc/principalDB</res-ref-name> </resource-ref> <resource-ref> <description>The backup datasource</description> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-ref-name>jdbc/backupDB</res-ref-name> </resource-ref>
WEB-INF/jetty-env.xml
私が持っている<New id="principalDB" class="org.mortbay.jetty.plus.naming.Resource"> <Arg><Ref id="wac"/></Arg> <Arg>jdbc/principalDB</Arg> <Arg> <New class="com.atomikos.jdbc.nonxa.NonXADataSourceBean"> <Set name="driverClassName">org.postgresql.jdbc3.Jdbc3ConnectionPool</Set> <Set name="ServerName">localhost</Set> <Set name="PortNumber">5432</Set> <Set name="DatabaseName">first</Set> <Set name="Url">jdbc:postgresql://localhost:5432/first</Set> <Set name="user">test</Set> <Set name="password">password</Set> </New> </Arg> </New> <New id="backupDB" class="org.mortbay.jetty.plus.naming.Resource"> <Arg><Ref id="wac"/></Arg> <Arg>jdbc/backupDB</Arg> <Arg> <New class="com.atomikos.jdbc.nonxa.NonXADataSourceBean"> <Set name="driverClassName">org.postgresql.jdbc3.Jdbc3ConnectionPool</Set> <Set name="ServerName">localhost</Set> <Set name="PortNumber">5432</Set> <Set name="DatabaseName">second</Set> <Set name="Url">jdbc:postgresql://localhost:5432/second</Set> <Set name="user">testSec</Set> <Set name="password">password</Set> </New> </Arg> </New>
私は何を間違っていますか?