Re: MongoDB - Spring Configuration problems.

61 views
Skip to first unread message

Trisha Gee

unread,
May 29, 2013, 10:43:08 AM5/29/13
to mongod...@googlegroups.com
Your application context file is not on the classpath, your main method can't find it.  When I ran your code after putting application-context.xml in a directory that is on the classpath, I no longer get the error "NoSuchBeanDefinitionException: No bean named 'mongoTemplate' is defined".  I get a different error, but at least I can see it's using the application context now.

Try either moving application-context.xml into a directory that's already on the classpath, or add the directory that it is in onto your classpath.

Trisha

On Tuesday, May 21, 2013 2:07:13 PM UTC+1, Ayush Dev wrote:
I am trying to create a simple application, but the problem is when I do configuration using spring's application-context.xml its not working, So i have to use the @Configuration annotation and have to carry out the configuration using java class.
I am posting my code here kindly have a look
application-context.xml
<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
  <!-- Activate annotation configured components -->
  <context:annotation-config/>
 
  <!-- Scan components for annotations within the configured package -->
  <context:component-scan base-package="com.discusit">
    <context:exclude-filter type="annotation" expression="org.springframework.context.annotation.Configuration"/>
  </context:component-scan>

  <!-- Factory bean that creates the Mongo instance -->
  <bean id="mongo" class="com.mongodb.Mongo">
    <constructor-arg name="host" value="127.0.0.1" />
    <constructor-arg name="port" value="27017" />
  </bean>

  <!-- Define the MongoTemplate which handles connectivity with MongoDB -->
  <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" depends-on="mongo">
    <constructor-arg name="mongo" ref="mongo"/>
    <constructor-arg name="databaseName" value="firstMongoDB"/>
  </bean>
 
  <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->
  <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
 
  <bean id="mainApplication" class="com.discusit.main.MainApplication"></bean>
    
</beans>

MainApplication.java

/**
 * @author Ayushya Devmurari
 */

package com.discusit.main;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.discusit.model.Person;
import com.discusit.model.impl.PersonImpl;

/**
 * This is class contains the main method for this Application(MongoDBAppTrail4)
 */
public class MainApplication {

    /**
     * This is a variable used for Logging purpose, I have used slf4j.
     */
    final Logger LOGGER = LoggerFactory.getLogger(MainApplication.class);
   
    @Autowired
    MongoTemplate mongoTemplate;

    public void savePerson(Person p) {
        mongoTemplate.save(p);
    }

    public static void main(String[] args) {
       
        ApplicationContext ctx = new GenericXmlApplicationContext("classpath*:application-context.xml");
       
        MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");
       
        //ApplicationContext ctx = new GenericXmlApplicationContext("classpath*:applicationContext.xml");
        //MongoTemplate mongoTemplate = ctx.getBean(MongoTemplate.class);
       
       
        Person p = new PersonImpl("1", "Ayushya", "Devmurari");
        //MainApplication ma = new MainApplication();
        //ma.savePerson(p);
        //ma.LOGGER.info("Person named : " + p.getName() + " with id : "
            //    + p.getId() + " is saved.");
    }
}


Model class : PersonImpl.java
/**
 * @author  Ayushya Devmurari
 */

package com.discusit.model.impl;

import org.springframework.data.mongodb.core.mapping.Document;
import com.discusit.model.Person;

/**
 * This class represents model object named "Person"
 */
@Document(collection = "AnotherPersonCollection")
public class PersonImpl implements Person {

    private String id;
    private String name;
    private String surname;

    // Constructor
    public PersonImpl() {

    }

    public PersonImpl(String id, String name, String surname) {
        this.id = id;
        this.name = name;
        this.surname = surname;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String getSurname() {
        return surname;
    }

    @Override
    public void setSurname(String surname) {
        this.surname = surname;
    }

    @Override
    public String toString() {
        return "Person has name " + "Id :" + id + "\n" + name + " \n"
                + "surname :" + surname;
    }

}

Stacktrace :
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mongoTemplate' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:568)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1102)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:278)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117)
    at com.discusit.main.MainApplication.main(MainApplication.java:39)

This is the same error I keep getting no matter how and what I change in my application-context.xml file.
Here is my pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.discusit</groupId>
    <artifactId>MongoDBAppTrail4</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>Trying to create MongoDBApp</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <!-- Log4J -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
        <!-- Spring framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>

        <!-- Spring Web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>

        <!-- mongodb java driver -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- Spring data mongodb -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>



Reply all
Reply to author
Forward
0 new messages