You shouldn't use @SpringBean in your spring-managed beans, only in your Wicket code. You don't want view-specific code in your "domain" code.
On Tue, Jun 16, 2009 at 4:17 PM, Bruce McGuire <[email protected]> wrote: > > Hi Martijn. > > Thanks for the quick response. > > Are you saying that the dao and the service should have the InjectorHolder > code, rather than the @Repository and @Service tags? > > Bruce. > > Martijn Dashorst 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 =ogFactory.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 =serService.getUsers() ; >>> >>> RepeatingView rv =ew RepeatingView("Users") ; >>> for(User user: userList) >>> { >>> Label userName =ew 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 =ogFactory.getLog(CoastwareApplication.class) ; >>> >>> private static ISpringContextLocator CTX_LOCATOR =ew >>> ISpringContextLocator() >>> { >>> public ApplicationContext getSpringContext() >>> { >>> return(CoastwareApplication.get().ctx) ; >>> } >>> } ; >>> >>> public CoastwareApplication() >>> { >>> } >>> >>> public void init() >>> { >>> ctx =ew 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 =reateProxy(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=utodetect" >>> xmlns=ttp://www.springframework.org/schema/beans" >>> xmlns:xsi=ttp://www.w3.org/2001/XMLSchema-instance" >>> xmlns:aop=ttp://www.springframework.org/schema/aop" >>> xmlns:tx=ttp://www.springframework.org/schema/tx" >>> xmlns:context=ttp://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=ataSource" >>> class=rg.springframework.jdbc.datasource.DriverManagerDataSource"> >>> <property name=rl" value="jdbc:mysql://192.168.15.128/vprobe"/> >>> <property name=riverClassName" value="com.mysql.jdbc.Driver"/> >>> <property name=sername" value="vProbe"/> >>> <property name=assword" value="vProbe"/> >>> </bean> >>> >>> <bean id=essionFactory" >>> class=rg.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> >>> <property name=ataSource" ref="dataSource"/> >>> >>> <property name=ackagesToScan"> >>> <list> >>> <value>com.coastware.vProbe.model</value> >>> </list> >>> </property> >>> >>> <property name=ibernateProperties"> >>> <props> >>> <prop >>> key=ibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> >>> <prop key=ibernate.show_sql">true</prop> >>> <prop key=ibernate.format_sql">true</prop> >>> <prop key=ibernate.use_sql_comments">true</prop> >>> </props> >>> </property> >>> </bean> >>> >>> <context:component-scan base-package=om.coastware" /> >>> >>> <bean id=penSessionInViewInterceptor" >>> class=rg.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"> >>> <property name=essionFactory"> >>> <ref bean=essionFactory"/> >>> </property> >>> </bean> >>> >>> <bean id=ransactionManager" >>> class=rg.springframework.orm.hibernate3.HibernateTransactionManager"> >>> <property name=essionFactory"> >>> <ref bean=essionFactory"/> >>> </property> >>> </bean> >>> >>> <bean id=ibernateTemplate" >>> class=rg.springframework.orm.hibernate3.HibernateTemplate"> >>> <property name=essionFactory"> >>> <ref bean=essionFactory"/> >>> </property> >>> </bean> >>> >>> <tx:annotation-driven transaction-manager=ransactionManager"/> >>> >>> <bean >>> class=rg.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> >>> >>> <bean >>> class=rg.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> >>> <property name=ransactionInterceptor" ref="txInterceptor"/> >>> </bean> >>> >>> <bean id=xInterceptor" >>> class=rg.springframework.transaction.interceptor.TransactionInterceptor"> >>> <property name=ransactionManager" ref="transactionManager"/> >>> <property name=ransactionAttributeSource"> >>> <bean >>> class=rg.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] >>> >>> >>> >> >> >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
