However, you should let spring handle that one, as it is already a spring managed bean.
Martijn On Tue, Jun 16, 2009 at 9:34 PM, Martijn Dashorst<[email protected]> wrote: > @SpringBean only works with Components. For all other uses you should > either call InjectorHolder.getInjector().inject(this) in your > constructor or use Salve. > > Martijn > > On Tue, Jun 16, 2009 at 9:26 PM, Bruce McGuire<[email protected]> wrote: >> Hello. >> >> I have created a new small project to try to figure out how to use the >> SpringBean, Service, and Repository annotations with Wicket, Spring, >> Hibernate, Maven and Eclipse. >> >> However, I am getting an error with a user DAO that I have created. >> >> I have a service that is using the dao tagged as @Service, I have the DAO in >> the service tagged with @SpringBean, and the DAO code itself is tagged with >> @Repository. The service that is using the DAO is getting found correctly. >> >> When I have the InjectorHolder code in the dao constructor, I get an error >> that says 'InjectorHolder has not been assigned an injector' >> >> When I comment out the InjectorHolder line in the dao constructor, the DAO >> is null, and getUserDAO throws an exception. >> >> Since I am not certain that I can attach files, I will insert the relevant >> code and exceptions into this email. >> >> Any pointers you can give would be greatly appreciated. >> >> Thanks very very much, >> >> Bruce. >> >> UserServiceImpl >> ========================= >> @Service("UserService") >> public class UserServiceImpl implements UserService >> { >> @SpringBean >> UserDAO userDAO ; >> >> private UserDAO getUserDAO() >> { >> if (null == userDAO) >> { >> throw new RuntimeException("userDAO is null") ; >> } >> >> return(userDAO) ; >> } >> >> @Override >> public List<User> getUsers() >> { >> return (getUserDAO().findAll()); >> } >> ========================= >> >> UserDAOHibernate >> ========================= >> @Repository("UserDAO") >> public class UserDAOHibernate extends GenericDAOHibernate<User, String> >> implements UserDAO >> { >> private static Log log = LogFactory.getLog("UserDAOHibernate"); >> >> public UserDAOHibernate() >> { >> InjectorHolder.getInjector().inject(this); >> } >> >> ... >> ========================= >> >> HomePage >> ========================= >> public class HomePage extends WebPage >> { >> @SpringBean >> private UserService userService ; >> >> public HomePage(final PageParameters parameters) >> { >> super (parameters) ; >> >> List<User> userList = userService.getUsers() ; >> >> RepeatingView rv = new RepeatingView("Users") ; >> for(User user: userList) >> { >> Label userName = new Label("username", user.getUsername()) ; >> rv.add(userName) ; >> } >> >> this.add(rv) ; >> } >> } >> ========================= >> >> CoastwareApplication >> ========================= >> public class CoastwareApplication extends WebApplication >> { >> private ApplicationContext ctx; >> >> @SpringBean >> private UserService userService ; >> >> protected static Log log = LogFactory.getLog(CoastwareApplication.class) ; >> >> private static ISpringContextLocator CTX_LOCATOR = new >> ISpringContextLocator() >> { >> public ApplicationContext getSpringContext() >> { >> return(CoastwareApplication.get().ctx) ; >> } >> } ; >> >> public CoastwareApplication() >> { >> } >> >> public void init() >> { >> ctx = new ClassPathXmlApplicationContext("appContext.xml") ; >> >> addComponentInstantiationListener(new SpringComponentInjector(this)); >> >> super.init() ; >> } >> >> @Override >> public Session newSession(Request request, Response response) >> { >> return (new WebSession(request)) ; >> } >> >> public static CoastwareApplication get() >> { >> return ((CoastwareApplication) Application.get()) ; >> } >> >> private <T> T createProxy(Class<T> clazz) >> { >> return ((T) LazyInitProxyFactory.createProxy(clazz, new >> SpringBeanLocator(clazz, CTX_LOCATOR))) ; >> } >> >> public Class<HomePage> getHomePage() >> { >> return HomePage.class; >> } >> >> public UserService getUserService() >> { >> if (null == userService) >> { >> userService = createProxy(UserService.class) ; >> } >> return userService; >> } >> } >> ========================= >> >> >> Web.xml >> ========================= >> <display-name>vProbe</display-name> >> >> <context-param> >> <param-name>contextConfigLocation</param-name> >> <param-value>classpath:appContext.xml</param-value> >> </context-param> >> >> <context-param> >> <param-name>configuration</param-name> >> <param-value>development</param-value> >> </context-param> >> >> <listener> >> <listener-class> >> org.springframework.web.context.ContextLoaderListener >> </listener-class> >> </listener> >> >> <filter> >> <filter-name>wicketFilter</filter-name> >> >> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> >> <init-param> >> <param-name>applicationClassName</param-name> >> >> <param-value>com.coastware.vProbe.CoastwareApplication</param-value> >> </init-param> >> </filter> >> >> <filter> >> <filter-name>opensessioninview</filter-name> >> >> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> >> </filter> >> >> <filter-mapping> >> <filter-name>wicketFilter</filter-name> >> <url-pattern>/*</url-pattern> >> </filter-mapping> >> >> <filter-mapping> >> <filter-name>opensessioninview</filter-name> >> <url-pattern>/*</url-pattern> >> </filter-mapping> >> ========================= >> >> appContext.xml >> ========================= >> <?xml version="1.0" encoding="UTF-8"?> >> <beans >> default-autowire="autodetect" >> xmlns="http://www.springframework.org/schema/beans" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns:aop="http://www.springframework.org/schema/aop" >> xmlns:tx="http://www.springframework.org/schema/tx" >> xmlns:context="http://www.springframework.org/schema/context" >> xsi:schemaLocation=" >> http://www.springframework.org/schema/beans >> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd >> http://www.springframework.org/schema/aop >> http://www.springframework.org/schema/aop/spring-aop-2.5.xsd >> http://www.springframework.org/schema/tx >> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd >> http://www.springframework.org/schema/context >> http://www.springframework.org/schema/context/spring-context-2.5.xsd"> >> >> <bean id="dataSource" >> class="org.springframework.jdbc.datasource.DriverManagerDataSource"> >> <property name="url" value="jdbc:mysql://192.168.15.128/vprobe"/> >> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> >> <property name="username" value="vProbe"/> >> <property name="password" value="vProbe"/> >> </bean> >> >> <bean id="sessionFactory" >> class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> >> <property name="dataSource" ref="dataSource"/> >> >> <property name="packagesToScan"> >> <list> >> <value>com.coastware.vProbe.model</value> >> </list> >> </property> >> >> <property name="hibernateProperties"> >> <props> >> <prop >> key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> >> <prop key="hibernate.show_sql">true</prop> >> <prop key="hibernate.format_sql">true</prop> >> <prop key="hibernate.use_sql_comments">true</prop> >> </props> >> </property> >> </bean> >> >> <context:component-scan base-package="com.coastware" /> >> >> <bean id="openSessionInViewInterceptor" >> class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"> >> <property name="sessionFactory"> >> <ref bean="sessionFactory"/> >> </property> >> </bean> >> >> <bean id="transactionManager" >> class="org.springframework.orm.hibernate3.HibernateTransactionManager"> >> <property name="sessionFactory"> >> <ref bean="sessionFactory"/> >> </property> >> </bean> >> >> <bean id="hibernateTemplate" >> class="org.springframework.orm.hibernate3.HibernateTemplate"> >> <property name="sessionFactory"> >> <ref bean="sessionFactory"/> >> </property> >> </bean> >> >> <tx:annotation-driven transaction-manager="transactionManager"/> >> >> <bean >> class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> >> >> <bean >> class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> >> <property name="transactionInterceptor" ref="txInterceptor"/> >> </bean> >> >> <bean id="txInterceptor" >> class="org.springframework.transaction.interceptor.TransactionInterceptor"> >> <property name="transactionManager" ref="transactionManager"/> >> <property name="transactionAttributeSource"> >> <bean >> class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/> >> </property> >> </bean> >> </beans> >> ========================= >> >> >> Error with InjectorHolder line >> ========================= >> SEVERE: Exception sending context initialized event to listener instance of >> class org.springframework.web.context.ContextLoaderListener >> org.springframework.beans.factory.BeanCreationException: Error creating bean >> with name 'UserDAO' defined in file [C:\Program Files\Apache Software >> Foundation\Tomcat >> 6.0\webapps\vProbe\WEB-INF\classes\com\coastware\vProbe\model\dao\hibernate\UserDAOHibernate.class]: >> Instantiation of bean failed; nested exception is >> org.springframework.beans.BeanInstantiationException: Could not instantiate >> bean class [com.coastware.vProbe.model.dao.hibernate.UserDAOHibernate]: >> Constructor threw exception; nested exception is >> java.lang.IllegalStateException: InjectorHolder has not been assigned an >> injector. Use InjectorHolder.setInjector() to assign an injector. In most >> cases this should be done once inside SpringWebApplication subclass's init() >> method. >> at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883) >> at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839) >> at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440) >> at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) >> at java.security.AccessController.doPrivileged(Native Method) >> at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) >> at >> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) >> at >> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) >> at >> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) >> at >> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) >> at >> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) >> at >> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) >> at >> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) >> at >> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) >> at >> org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) >> at >> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) >> at >> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) >> at >> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843) >> at >> org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) >> at >> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) >> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) >> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) >> at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830) >> at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719) >> at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490) >> at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) >> at >> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) >> at >> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) >> at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) >> at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) >> at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) >> at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) >> at >> org.apache.catalina.core.StandardService.start(StandardService.java:516) >> at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) >> at org.apache.catalina.startup.Catalina.start(Catalina.java:578) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) >> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) >> at java.lang.reflect.Method.invoke(Unknown Source) >> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) >> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) >> Caused by: org.springframework.beans.BeanInstantiationException: Could not >> instantiate bean class >> [com.coastware.vProbe.model.dao.hibernate.UserDAOHibernate]: Constructor >> threw exception; nested exception is java.lang.IllegalStateException: >> InjectorHolder has not been assigned an injector. Use >> InjectorHolder.setInjector() to assign an injector. In most cases this >> should be done once inside SpringWebApplication subclass's init() method. >> at >> org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115) >> at >> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61) >> at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877) >> ... 40 more >> Caused by: java.lang.IllegalStateException: InjectorHolder has not been >> assigned an injector. Use InjectorHolder.setInjector() to assign an >> injector. In most cases this should be done once inside SpringWebApplication >> subclass's init() method. >> at >> org.apache.wicket.injection.web.InjectorHolder.getInjector(InjectorHolder.java:64) >> at >> com.coastware.vProbe.model.dao.hibernate.UserDAOHibernate.<init>(UserDAOHibernate.java:26) >> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) >> at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) >> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown >> Source) >> at java.lang.reflect.Constructor.newInstance(Unknown Source) >> at >> org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100) >> ... 42 more >> ========================= >> >> Error when InjectorHolder line is commented out. >> ========================= >> >> java.lang.RuntimeException: userDAO is null at >> com.coastware.vProbe.service.UserServiceImpl.getUserDAO(UserServiceImpl.java:90) >> at >> com.coastware.vProbe.service.UserServiceImpl.getUsers(UserServiceImpl.java:68) >> at java.lang.reflect.Method.invoke(Unknown Source) at >> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) >> at >> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198) >> at $Proxy15.getUsers(Unknown Source) at >> java.lang.reflect.Method.invoke(Unknown Source) at >> org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:416) >> at org.apache.wicket.proxy.$Proxy16.getUsers(Unknown Source) at >> com.coastware.vProbe.HomePage.<init>(HomePage.java:27) at >> java.lang.reflect.Constructor.newInstance(Unknown Source) at >> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:147) >> at >> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:66) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:272) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:293) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:210) >> at >> org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:91) >> at >> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1220) >> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1297) at >> org.apache.wicket.RequestCycle.steps(RequestCycle.java:1399) at >> org.apache.wicket.RequestCycle.request(RequestCycle.java:529) at >> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:356) at >> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:201) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) >> at >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >> at >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> at >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) >> at >> org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857) >> at >> org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) >> at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) >> at java.lang.Thread.run(Unknown Source) >> >> Complete stack: >> >> org.apache.wicket.WicketRuntimeException: Can't instantiate page using >> constructor public >> com.coastware.vProbe.HomePage(org.apache.wicket.PageParameters) and argument >> at >> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:168) >> at >> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:66) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:272) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:293) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:210) >> at >> org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:91) >> at >> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1220) >> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1297) at >> org.apache.wicket.RequestCycle.steps(RequestCycle.java:1399) at >> org.apache.wicket.RequestCycle.request(RequestCycle.java:529) at >> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:356) >> >> java.lang.reflect.InvocationTargetException at >> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at >> sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at >> java.lang.reflect.Constructor.newInstance(Unknown Source) at >> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:147) >> at >> org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:66) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:272) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:293) >> at >> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:210) >> at >> org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:91) >> at >> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1220) >> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1297) at >> org.apache.wicket.RequestCycle.steps(RequestCycle.java:1399) at >> org.apache.wicket.RequestCycle.request(RequestCycle.java:529) at >> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:356) >> >> ========================= >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > > -- > Become a Wicket expert, learn from the best: http://wicketinaction.com > Apache Wicket 1.3.5 is released > Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3. > -- Become a Wicket expert, learn from the best: http://wicketinaction.com Apache Wicket 1.3.5 is released Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
