java - Use Tomcat connection pool in JAR (shared conf from web app, spring configuration) -
i have few web applications deployed on tomcat use same database access configuration tomcat connection pool:
<bean id="datasource" class="org.springframework.jndi.jndiobjectfactorybean"> <property name="jndiname" value="java:comp/env/jdbc/postgres"/> <property name="lookuponstartup" value="true"/> <property name="proxyinterface" value="javax.sql.datasource"/> </bean>
(web.xml in each project , context.xml in tomcat set properly, because works :)).
i use connection jar files run on same server. in jar use spring, following error if use above datasource definition in code this:
string[] springconfig = { "file:/var/pro/conf/data-access.xml"}; context = new classpathxmlapplicationcontext(springconfig);
i following error:
exception in thread "main" java.lang.exceptionininitializererror @ java.lang.class.forname0(native method) @ java.lang.class.forname(class.java:247) @ org.eclipse.jdt.internal.jarinjarloader.jarrsrcloader.main(jarrsrcloader.java:56) caused by: org.springframework.beans.factory.beancreationexception: error creating bean name 'datasource' defined in url [file:/var/pro/conf/data-access.xml]: invocation of init method failed; nested exception javax.naming.noinitialcontextexception: need specify class name in environment or system property, or applet parameter, or in application resource file: java.naming.factory.initial @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1482) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:521) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:458) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:295) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:223) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:292) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:194) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:610) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:932) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:479) @ org.springframework.context.support.classpathxmlapplicationcontext.<init>(classpathxmlapplicationcontext.java:139) @ org.springframework.context.support.classpathxmlapplicationcontext.<init>(classpathxmlapplicationcontext.java:93) @ com.proj.job.start.<clinit>(start.java:73) ... 3 more caused by: javax.naming.noinitialcontextexception: need specify class name in environment or system property, or applet parameter, or in application resource file: java.naming.factory.initial @ javax.naming.spi.namingmanager.getinitialcontext(namingmanager.java:645) @ javax.naming.initialcontext.getdefaultinitctx(initialcontext.java:288) @ javax.naming.initialcontext.geturlordefaultinitctx(initialcontext.java:325) @ javax.naming.initialcontext.lookup(initialcontext.java:392) @ org.springframework.jndi.jnditemplate$1.doincontext(jnditemplate.java:154) @ org.springframework.jndi.jnditemplate.execute(jnditemplate.java:87) @ org.springframework.jndi.jnditemplate.lookup(jnditemplate.java:152) @ 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.jndiobjecttargetsource.afterpropertiesset(jndiobjecttargetsource.java:97) @ org.springframework.jndi.jndiobjectfactorybean$jndiobjectproxyfactory.createjndiobjectproxy(jndiobjectfactorybean.java:285) @ org.springframework.jndi.jndiobjectfactorybean$jndiobjectproxyfactory.access$000(jndiobjectfactorybean.java:274) @ org.springframework.jndi.jndiobjectfactorybean.afterpropertiesset(jndiobjectfactorybean.java:177) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1541) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1479) ... 15 more
this code not work if run outside tomcat, main. tomcat provides initial context factory jndi.
Comments
Post a Comment