2015-11-27 47 views
1

我有一個用AppFuse(多模塊項目)編寫的小應用程序。我想嘗試使用Apache Wicket來製作某種UI。由於AppFuse基於Spring,我發現使用Spring和Wicket的tutorial。我使用Wicket page的快速入門設置了Wicket項目。 每當我嘗試運行Wicket的應用程序,我得到這個錯誤(完整的堆棧跟蹤是在文章的末尾):AppFuse + wicket:沒有[org.hibernate.SessionFactory]類型的合格bean

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'personClubDao': 
Injection of resource dependencies failed; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this dependency. 

這裏是我的AppFuse項目結構

Hello (pom) 
+--core (jar) - generated by AppFuse 
    +--org.microapp.hello.model 
    +--org.microapp.hello.dao 
+--web (war)- generated by Appfuse 
    +--org.microapp.hello.service 
+--wicket (war)- Wicket application 
    +--org.microapp.hello 

有四個實體在覈心模塊 - ,俱樂部,房子PersonClub。 Person,Club和House的DAO在core/src/main/resources/applicationContext.xml中註冊(如here所示),PersonClub實體的DAO位於org.microapp.hello.dao.PersonClubDaoHibernate.java中。

這裏是PersonClubDao接口:

public interface PersonClubDao extends GenericDao<PersonClub, Long> { 
    //some methods 
} 

這裏是PersonClubDaoHibernate類:

@Repository("personClubDao") 
public class PersonClubDaoHibernate extends 
    GenericDaoHibernate<PersonClub, Long> implements PersonClubDao { 

    public PersonClubDaoHibernate() { 
     super(PersonClub.class); 
     // TODO Auto-generated constructor stub 
    } 

    //some methods 
} 

我試圖現在要做的,是自動裝配PersonClubDao(或任何其他DAO)在主頁類在wicket模塊並顯示數據庫中的一些數據。

這裏是主頁類:

public class HomePage extends WebPage { 
    private static final long serialVersionUID = 1L; 

    @SpringBean 
    private PersonClubDao personClubDao; 

    public HomePage(final PageParameters parameters) { 
     super(parameters); 
     // TODO Add your page's components here 
     //no code here so far 
    } 
} 

和檢票/ src目錄/主/ web應用/ WEB-INF/applicationContext.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"> 

    <context:component-scan base-package="org.microapp.hello.dao" />  

</beans> 

如果我嘗試做一些假接口和虛擬類,並使用@SpringBean連接它,它工作得很好。但是當我嘗試連接任何DAO時,應用程序崩潰。我不太確定該怎麼做,我試圖將hibernate包的依賴添加到我的pom.xml中,但沒有運氣,並且使用谷歌搜索也沒有幫助。

以下是完整的堆棧跟蹤:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personClubDao': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:311) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:838) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800) 
at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444) 
at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:791) 
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:294) 
at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349) 
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.startWebapp(JettyWebAppContext.java:296) 
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342) 
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) 
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505) 
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:365) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:163) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) 
at org.eclipse.jetty.server.Server.start(Server.java:387) 
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) 
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 
at org.eclipse.jetty.server.Server.doStart(Server.java:354) 
at org.eclipse.jetty.maven.plugin.JettyServer.doStart(JettyServer.java:73) 
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:534) 
at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:357) 
at org.eclipse.jetty.maven.plugin.JettyRunMojo.execute(JettyRunMojo.java:167) 
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 
at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:508) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:486) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:615) 
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308) 
... 65 more 

回答

3

問題中描述的的,看到

類型沒有合格豆[org.hibernate.SessionFactory實例]研究發現的依賴性: 預計至少有1個bean有資格作爲這個依賴關係的autowire候選人。

這意味着你有沒有可配置休眠SessionFactory的,谷歌的例子,如何使用Spring構建SessionFactory的,看到

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/orm.html

如果你使用Hibernate,它需要在Spring創建一些其他豆類上下文。

+0

非常感謝!這正是我需要的!你救了我的命! –

相關問題