my application just tests if the environment is basically working. therefore i set up a testclass corresponding to the "Hello Worlds" example which can be found in the gitHub repository of SpringSource. Neo4j is included as static web app and runs embedded. The Webinterface is not nescessarily needed. The Problem is, when i'm starting to run the testcases via Junit i get an error like this:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'GalaxyServiceTests': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private GalaxyService GalaxyServiceTests.galaxyService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [GalaxyService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
my application config is like this
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/neo4j
http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd">
<context:annotation-config/>
<bean id="graphDatabaseService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
destroy-method="shutdown">
<constructor-arg index="0" value="target/graph.db" />
<constructor-arg index="1">
<map><entry key="enable_remote_shell" value="true"/></map>
</constructor-arg>
</bean>
<!-- <bean id="serverWrapper" class="org.neo4j.server.WrappingNeoServerBootstrapper" -->
<!-- init-method="start" destroy-method="stop"> -->
<!-- <constructor-arg ref="graphDatabaseService"/> -->
<!-- </bean> -->
</beans>
The testclass is quity simple
@ContextConfiguration( "file:c:/Users/ben/Dropbox/Semester 6/VM Graphentheorie/devEnv/bodega/application-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class GalaxyServiceTests {
// @Autowired
// private GalaxyService galaxyService;
@Autowired
private Neo4jTemplate template;
@Rollback(false)
@BeforeTransaction
public void cleanUpGraph() {
Neo4jHelper.cleanDb(template);
}
@Test
public void allowWorldCreation(){
// GraphDatabaseService graphDatabaseService = new GraphDatabaseFactory().newEmbeddedDatabase( "target/graph.db" );
// Node abc = graphDatabaseService.createNode();
// abc.setProperty("name","ben");
World abc = new World("Erde",1);
template.save(abc);
and my pom looks like this:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.0.7.RELEASE</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>2.2.0.BUILD-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<version>2.0.0-M02</version>
<classifier>static-web</classifier>
</dependency>
Since im new to spring in connection with neo4j i cant resolve this error. if someone got a hint or some advice - thanks in advance
EDIT i changed the dependency of spring-data from 2.2.0.BUILD-SNAPSHOT to 2.2.0.RELEASE.. now neo4j is running till the point when an error is passed to console:
21:11:48.196 [main] ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@7e26f5a7] to prepare test instance [GalaxyServiceTests@64d74895]
java.lang.IllegalStateException: Failed to load ApplicationContext
EDIT2 I've published the repository on http://github.com/BenMatheja/bodega
EDIT3
Something with the path of application-context.xml was messed up. I fixed that issue with @ContextConfiguration( locations = {"classpath:/META-INF/application-context.xml"})
I'm at the point that an Exception
No qualifying bean of type [start.GalaxyService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency
is thrown each time i run the JUnit4 test now.
EDIT4 I managed to get it working yesterday. Some parts of the Application-context were pretty messed up.
<context:spring-configured/>
<context:annotation-config/>
<context:component-scan base-package="components"/>
<neo4j:config graphDatabaseService="graphDatabaseService"/>
<neo4j:config storeDirectory="target/graph.db"/>
<neo4j:repositories base-package="Repositories"/>
This is a snippet of my working app-context. Furthermore i missed to attach an @Service to the GalaxyService class.
Now everything is working as intended. This will maybe help someone facing the same problem.