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<br...@coastware.com> 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: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org





Reply via email to