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]

Reply via email to