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]

Reply via email to