skram
Aug 29th, 2011, 10:26 PM
Case closed. The issue has been resolved by using the latest Cloud Foundry dependency:
<org.cloudfoundry-version>0.8.0</org.cloudfoundry-version>
<dependency>
<groupId>org.cloudfoundry</groupId>
<artifactId>cloudfoundry-runtime</artifactId>
<version>${org.cloudfoundry-version}</version>
</dependency>
My problem is basic. I have an application that uses MongoDB. It works locally, but when deploying to Cloud Foundry, I get two errors (depending on how I configure my Mongo).
First, my Maven snippet:
<spring.data.mongo.version>1.0.0.BUILD-SNAPSHOT</spring.data.mongo.version>
<org.cloudfoundry-version>0.7.1</org.cloudfoundry-version>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>${spring.data.mongo.version}</version>
</dependency>
<dependency>
<groupId>org.cloudfoundry</groupId>
<artifactId>cloudfoundry-runtime</artifactId>
<version>${org.cloudfoundry-version}</version>
</dependency>
Here's my initial MongoDB config that works on my localhost machine:
<?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:p="http://www.springframework.org/schema/p"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:cloud="http://schema.cloudfoundry.org/spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://schema.cloudfoundry.org/spring
http://schema.cloudfoundry.org/spring/cloudfoundry-spring-0.7.xsd">
<mongo:repositories base-package="org.sample.repositories" />
<mongo:mongo host="localhost" port="27017"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplat e">
<constructor-arg ref="mongo"/>
<constructor-arg name="databaseName" value="mydb"/>
</bean>
</beans>
When I deploy this directly to CloudFoundry, I get the following exception:
[ERROR] [main 02:56:48] (ContextLoader.java:initWebApplicationContext:238) Context initialization failed
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'initMongoService' defined in ServletContext resource [/WEB-INF/spring-mongo.xml]: Invocation of init method failed; nested exception is org.springframework.dao.DataAccessResourceFailureE xception: can't call something; nested exception is com.mongodb.MongoException$Network: can't call something
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.doCreateBean(AbstractAu towireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.Abstract BeanFactory$1.getObject(AbstractBeanFactory.java:2 95)
at org.springframework.beans.factory.support.DefaultS ingletonBeanRegistry.getSingleton(DefaultSingleton BeanRegistry.java:222)
at org.springframework.beans.factory.support.Abstract BeanFactory.doGetBean(AbstractBeanFactory.java:292 )
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplic ationContext.finishBeanFactoryInitialization(Abstr actApplicationContext.java:900)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:455)
at org.springframework.web.context.ContextLoader.crea teWebApplicationContext(ContextLoader.java:294)
at org.springframework.web.context.ContextLoader.init WebApplicationContext(ContextLoader.java:215)
at org.springframework.web.context.ContextLoaderListe ner.contextInitialized(ContextLoaderListener.java: 47)
at org.apache.catalina.core.StandardContext.listenerS tart(StandardContext.java:4205)
at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4704)
at org.apache.catalina.core.ContainerBase.addChildInt ernal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(Co ntainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(Sta ndardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployDirec tory(HostConfig.java:1079)
at org.apache.catalina.startup.HostConfig.deployDirec tories(HostConfig.java:1002)
at org.apache.catalina.startup.HostConfig.deployApps( HostConfig.java:506)
at org.apache.catalina.startup.HostConfig.start(HostC onfig.java:1315)
at org.apache.catalina.startup.HostConfig.lifecycleEv ent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLife cycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(Conta inerBase.java:1061)
at org.apache.catalina.core.StandardHost.start(Standa rdHost.java:840)
at org.apache.catalina.core.ContainerBase.start(Conta inerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(Stan dardEngine.java:463)
at org.apache.catalina.core.StandardService.start(Sta ndardService.java:525)
at org.apache.catalina.core.StandardServer.start(Stan dardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalin a.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootst rap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstr ap.java:414)
Caused by: org.springframework.dao.DataAccessResourceFailureE xception: can't call something; nested exception is com.mongodb.MongoException$Network: can't call something
at org.springframework.data.mongodb.core.MongoExcepti onTranslator.translateExceptionIfPossible(MongoExc eptionTranslator.java:56)
at org.springframework.data.mongodb.core.MongoTemplat e.potentiallyConvertRuntimeException(MongoTemplate .java:1153)
at org.springframework.data.mongodb.core.MongoTemplat e.execute(MongoTemplate.java:292)
at org.springframework.data.mongodb.core.MongoTemplat e.dropCollection(MongoTemplate.java:350)
at org.krams.tutorial.service.InitMongoService.init(I nitMongoService.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeCustomInitMethod( AbstractAutowireCapableBeanFactory.java:1546)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1487)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1417)
... 36 more
Caused by: com.mongodb.MongoException$Network: can't call something
at com.mongodb.DBTCPConnector.call(DBTCPConnector.jav a:211)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLa yer.java:303)
at com.mongodb.DB.command(DB.java:159)
at com.mongodb.DB.command(DB.java:144)
at com.mongodb.DBCollection.drop(DBCollection.java:68 2)
at com.mongodb.DBApiLayer$MyCollection.drop(DBApiLaye r.java:212)
at org.springframework.data.mongodb.core.MongoTemplat e$6.doInCollection(MongoTemplate.java:352)
at org.springframework.data.mongodb.core.MongoTemplat e$6.doInCollection(MongoTemplate.java:350)
at org.springframework.data.mongodb.core.MongoTemplat e.execute(MongoTemplate.java:290)
... 45 more
Caused by: java.io.IOException: couldn't connect to [7a844500-b368-429d-bc29-bfc3484e10d9/127.0.0.1:27017] bc:java.net.ConnectException: Connection refused
at com.mongodb.DBPort._open(DBPort.java:224)
at com.mongodb.DBPort.go(DBPort.java:101)
at com.mongodb.DBPort.go(DBPort.java:82)
at com.mongodb.DBPort.call(DBPort.java:72)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.jav a:202)
... 53 more
I suspect maybe because I didn't used the cloud namespace.
<org.cloudfoundry-version>0.8.0</org.cloudfoundry-version>
<dependency>
<groupId>org.cloudfoundry</groupId>
<artifactId>cloudfoundry-runtime</artifactId>
<version>${org.cloudfoundry-version}</version>
</dependency>
My problem is basic. I have an application that uses MongoDB. It works locally, but when deploying to Cloud Foundry, I get two errors (depending on how I configure my Mongo).
First, my Maven snippet:
<spring.data.mongo.version>1.0.0.BUILD-SNAPSHOT</spring.data.mongo.version>
<org.cloudfoundry-version>0.7.1</org.cloudfoundry-version>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>${spring.data.mongo.version}</version>
</dependency>
<dependency>
<groupId>org.cloudfoundry</groupId>
<artifactId>cloudfoundry-runtime</artifactId>
<version>${org.cloudfoundry-version}</version>
</dependency>
Here's my initial MongoDB config that works on my localhost machine:
<?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:p="http://www.springframework.org/schema/p"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:cloud="http://schema.cloudfoundry.org/spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://schema.cloudfoundry.org/spring
http://schema.cloudfoundry.org/spring/cloudfoundry-spring-0.7.xsd">
<mongo:repositories base-package="org.sample.repositories" />
<mongo:mongo host="localhost" port="27017"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplat e">
<constructor-arg ref="mongo"/>
<constructor-arg name="databaseName" value="mydb"/>
</bean>
</beans>
When I deploy this directly to CloudFoundry, I get the following exception:
[ERROR] [main 02:56:48] (ContextLoader.java:initWebApplicationContext:238) Context initialization failed
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'initMongoService' defined in ServletContext resource [/WEB-INF/spring-mongo.xml]: Invocation of init method failed; nested exception is org.springframework.dao.DataAccessResourceFailureE xception: can't call something; nested exception is com.mongodb.MongoException$Network: can't call something
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.doCreateBean(AbstractAu towireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.Abstract BeanFactory$1.getObject(AbstractBeanFactory.java:2 95)
at org.springframework.beans.factory.support.DefaultS ingletonBeanRegistry.getSingleton(DefaultSingleton BeanRegistry.java:222)
at org.springframework.beans.factory.support.Abstract BeanFactory.doGetBean(AbstractBeanFactory.java:292 )
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplic ationContext.finishBeanFactoryInitialization(Abstr actApplicationContext.java:900)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:455)
at org.springframework.web.context.ContextLoader.crea teWebApplicationContext(ContextLoader.java:294)
at org.springframework.web.context.ContextLoader.init WebApplicationContext(ContextLoader.java:215)
at org.springframework.web.context.ContextLoaderListe ner.contextInitialized(ContextLoaderListener.java: 47)
at org.apache.catalina.core.StandardContext.listenerS tart(StandardContext.java:4205)
at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4704)
at org.apache.catalina.core.ContainerBase.addChildInt ernal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(Co ntainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(Sta ndardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployDirec tory(HostConfig.java:1079)
at org.apache.catalina.startup.HostConfig.deployDirec tories(HostConfig.java:1002)
at org.apache.catalina.startup.HostConfig.deployApps( HostConfig.java:506)
at org.apache.catalina.startup.HostConfig.start(HostC onfig.java:1315)
at org.apache.catalina.startup.HostConfig.lifecycleEv ent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLife cycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(Conta inerBase.java:1061)
at org.apache.catalina.core.StandardHost.start(Standa rdHost.java:840)
at org.apache.catalina.core.ContainerBase.start(Conta inerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(Stan dardEngine.java:463)
at org.apache.catalina.core.StandardService.start(Sta ndardService.java:525)
at org.apache.catalina.core.StandardServer.start(Stan dardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalin a.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootst rap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstr ap.java:414)
Caused by: org.springframework.dao.DataAccessResourceFailureE xception: can't call something; nested exception is com.mongodb.MongoException$Network: can't call something
at org.springframework.data.mongodb.core.MongoExcepti onTranslator.translateExceptionIfPossible(MongoExc eptionTranslator.java:56)
at org.springframework.data.mongodb.core.MongoTemplat e.potentiallyConvertRuntimeException(MongoTemplate .java:1153)
at org.springframework.data.mongodb.core.MongoTemplat e.execute(MongoTemplate.java:292)
at org.springframework.data.mongodb.core.MongoTemplat e.dropCollection(MongoTemplate.java:350)
at org.krams.tutorial.service.InitMongoService.init(I nitMongoService.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeCustomInitMethod( AbstractAutowireCapableBeanFactory.java:1546)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1487)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1417)
... 36 more
Caused by: com.mongodb.MongoException$Network: can't call something
at com.mongodb.DBTCPConnector.call(DBTCPConnector.jav a:211)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLa yer.java:303)
at com.mongodb.DB.command(DB.java:159)
at com.mongodb.DB.command(DB.java:144)
at com.mongodb.DBCollection.drop(DBCollection.java:68 2)
at com.mongodb.DBApiLayer$MyCollection.drop(DBApiLaye r.java:212)
at org.springframework.data.mongodb.core.MongoTemplat e$6.doInCollection(MongoTemplate.java:352)
at org.springframework.data.mongodb.core.MongoTemplat e$6.doInCollection(MongoTemplate.java:350)
at org.springframework.data.mongodb.core.MongoTemplat e.execute(MongoTemplate.java:290)
... 45 more
Caused by: java.io.IOException: couldn't connect to [7a844500-b368-429d-bc29-bfc3484e10d9/127.0.0.1:27017] bc:java.net.ConnectException: Connection refused
at com.mongodb.DBPort._open(DBPort.java:224)
at com.mongodb.DBPort.go(DBPort.java:101)
at com.mongodb.DBPort.go(DBPort.java:82)
at com.mongodb.DBPort.call(DBPort.java:72)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.jav a:202)
... 53 more
I suspect maybe because I didn't used the cloud namespace.