java - Spring-data-mongodb db-factory id does not work -
i have working copy of mongo-config.xml uses default id of db-factory:
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.4.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <mongo:mongo id="replicasetmongo" replica-set="localhost:10901,localhost:10902"> <mongo:options connections-per-host="8" ssl="false" /> </mongo:mongo> <mongo:db-factory mongo-ref="replicasetmongo" dbname="logs" username="logs_owner" password="logs_owner" /> <mongo:mapping-converter> <mongo:custom-converters> <mongo:converter> <beanclass="com.utils.mongodb.dao.impl.ssplogswriteconverter"/> </mongo:converter> </mongo:custom-converters> </mongo:mapping-converter> <beanid="xmllogtemplate"class="org.springframework.data.mongodb.core.mongotemplate"> <constructor-arg name="mongodbfactory" ref="mongodbfactory"/> <constructor-arg name="mongoconverter" ref="mappingconverter"/> <propertyname="writeconcern"> <util:constant static-field="com.mongodb.writeconcern.unacknowledged"/> </property> </bean> </beans> however have requirement connect 2 different databases on same mongodb replica-set. hence want define 2 different mongo:db-factory beans. made following change: (only changed beans shown below)
<mongo:db-factory id="xmldbfactory" mongo-ref="replicasetmongo" dbname="logs" username="logs_owner" password="logs_owner" /> <beanid="xmllogtemplate" class="org.springframework.data.mongodb.core.mongotemplate"> <constructor-arg name="mongodbfactory" ref="xmldbfactory"/> <constructor-arg name="mongoconverter" ref="mappingconverter"/> <property name="writeconcern"> <util:constant static-field="com.mongodb.writeconcern.unacknowledged"/> </property> </bean> as deploy change, jboss starts throwing errors @ startup follows. bug in spring, or doing wrong?
15:33:37,507 error [org.springframework.web.context.contextloader] (msc service thread 1-1) context initialization failed: org.springframework.beans.factory.beancreationexception: error creating bean name 'indexcreationhelper': cannot resolve reference bean 'mongodbfactory' while setting constructor argument; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no bean named 'mongodbfactory' defined @ org.springframework.beans.factory.support.beandefinitionvalueresolver.resolvereference(beandefinitionvalueresolver.java:329) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.beandefinitionvalueresolver.resolvevalueifnecessary(beandefinitionvalueresolver.java:107) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.constructorresolver.resolveconstructorarguments(constructorresolver.java:615) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.constructorresolver.autowireconstructor(constructorresolver.java:148) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.autowireconstructor(abstractautowirecapablebeanfactory.java:1049) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory.java:953) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:490) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:461) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:295) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:223) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:292) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:194) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:607) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:932) [spring-context-3.2.0.release.jar:3.2.0.release] @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:479) [spring-context-3.2.0.release.jar:3.2.0.release] @ org.springframework.web.context.contextloader.configureandrefreshwebapplicationcontext(contextloader.java:383) [spring-web-3.2.0.release.jar:3.2.0.release] @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:283) [spring-web-3.2.0.release.jar:3.2.0.release] @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:112) [spring-web-3.2.0.release.jar:3.2.0.release] @ org.apache.catalina.core.standardcontext.contextlistenerstart(standardcontext.java:3392) [jbossweb-7.0.13.final.jar:] @ org.apache.catalina.core.standardcontext.start(standardcontext.java:3850) [jbossweb-7.0.13.final.jar:] @ org.jboss.as.web.deployment.webdeploymentservice.start(webdeploymentservice.java:90) [jboss-as-web-7.1.1.final.jar:7.1.1.final] @ org.jboss.msc.service.servicecontrollerimpl$starttask.startservice(servicecontrollerimpl.java:1811) @ org.jboss.msc.service.servicecontrollerimpl$starttask.run(servicecontrollerimpl.java:1746) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) [rt.jar:1.7.0_45] @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) [rt.jar:1.7.0_45] @ java.lang.thread.run(thread.java:744) [rt.jar:1.7.0_45] caused by: org.springframework.beans.factory.nosuchbeandefinitionexception: no bean named 'mongodbfactory' defined @ org.springframework.beans.factory.support.defaultlistablebeanfactory.getbeandefinition(defaultlistablebeanfactory.java:549) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractbeanfactory.getmergedlocalbeandefinition(abstractbeanfactory.java:1096) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:278) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:194) [spring-beans-3.2.0.release.jar:3.2.0.release] @ org.springframework.beans.factory.support.beandefinitionvalueresolver.resolvereference(beandefinitionvalueresolver.java:323) [spring-beans-3.2.0.release.jar:3.2.0.release] ... 25 more
the problem isn't db-factory, it's mapping-converter has optional argument "db-factory-ref". argument internally preset "mongodbfactory" match default "id" of db-factory.
so "id" of db-factory works, "db-factory-ref" of mongo-conver has set accordingly:
<mongo:db-factory id="xmldbfactory" ... /> <mongo:mapping-converter db-factory-ref="xmldbfactory">
Comments
Post a Comment