Something wired when tapestry try to get the HibernateSession :

Error invoking service builder method
org.apache.tapestry.hibernate.HibernateModule.build(HibernateSessionSource,
ThreadCleanupHub) (at HibernateModule.java:62) (for service
'HibernateSessionManager'): Exception constructing service
'HibernateSessionSource': Error invoking constructor
org.apache.tapestry.internal.hibernate.HibernateSessionSourceImpl(Log,
Collection, ClassNameLocator) (at HibernateSessionSourceImpl.java:35) (for
service 'HibernateSessionSource'): No service implements the interface
org.apache.commons.logging.Log.

java.lang.RuntimeException No service implements the interface
org.apache.commons.logging.Log.
Stack trace

   - org.apache.tapestry.ioc.internal.RegistryImpl.getService(
   RegistryImpl.java:553)
   -
   org.apache.tapestry.ioc.internal.services.MasterObjectProviderImpl.provide
   (MasterObjectProviderImpl.java:46)
   - org.apache.tapestry.ioc.internal.RegistryImpl.getObject(
   RegistryImpl.java:665)
   - org.apache.tapestry.ioc.internal.RegistryImpl.getObject(
   RegistryImpl.java:722)
   - org.apache.tapestry.ioc.internal.ObjectLocatorImpl.getObject(
   ObjectLocatorImpl.java:50)
   -
   org.apache.tapestry.ioc.internal.util.InternalUtils.calculateParameterValue
   (InternalUtils.java:217)
   -
   org.apache.tapestry.ioc.internal.util.InternalUtils.calculateParameters
   (InternalUtils.java:248)
   -
   
org.apache.tapestry.ioc.internal.util.InternalUtils.calculateParametersForConstructor
   (InternalUtils.java:235)
   -
   org.apache.tapestry.ioc.internal.ConstructorServiceCreator.createObject
   (ConstructorServiceCreator.java:46)
   -
   org.apache.tapestry.ioc.internal.SingletonServiceLifecycle.createService
   (SingletonServiceLifecycle.java:31)
   -
   org.apache.tapestry.ioc.internal.LifecycleWrappedServiceCreator.createObject
   (LifecycleWrappedServiceCreator.java:54)
   -
   org.apache.tapestry.ioc.internal.InterceptorStackBuilder.createObject(
   InterceptorStackBuilder.java:54)
   -
   
org.apache.tapestry.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject
   (RecursiveServiceCreationCheckWrapper.java:61)
   -
   
org.apache.tapestry.ioc.internal.services.JustInTimeObjectCreator.createObject
   (JustInTimeObjectCreator.java:67)
   - org.apache.tapestry.internal.hibernate.HibernateSessionManagerImpl
   .<init>(HibernateSessionManagerImpl.java:31)
   - org.apache.tapestry.hibernate.HibernateModule.build(
   HibernateModule.java:62)
   - sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   - sun.reflect.NativeMethodAccessorImpl.invoke(
   NativeMethodAccessorImpl.java:39)
   - sun.reflect.DelegatingMethodAccessorImpl.invoke(
   DelegatingMethodAccessorImpl.java:25)
   - java.lang.reflect.Method.invoke(Method.java:585)
   -
   org.apache.tapestry.ioc.internal.ServiceBuilderMethodInvoker.createObject
   (ServiceBuilderMethodInvoker.java:76)
   -
   
org.apache.tapestry.ioc.internal.services.PerThreadServiceCreator.initialValue
   (PerThreadServiceCreator.java:50)
   - java.lang.ThreadLocal$ThreadLocalMap.getAfterMiss(ThreadLocal.java
   :374)
   - java.lang.ThreadLocal$ThreadLocalMap.get(ThreadLocal.java:347)
   - java.lang.ThreadLocal$ThreadLocalMap.access$000(ThreadLocal.java
   :225)
   - java.lang.ThreadLocal.get(ThreadLocal.java:127)
   -
   
org.apache.tapestry.ioc.internal.services.PerThreadServiceCreator.createObject
   (PerThreadServiceCreator.java:56)
   - papo.dao.impl.UserDaoImpl.getUser(UserDaoImpl.java:35)

The origin of the problem is when trying to getSession() :

public class UserDaoImpl implements UserDao {
    private static Log log = LogFactory.getLog(UserDaoImpl.class);

    private Session session;
    public Session getSession() { return session; }
    public void setSession(Session session) { this.session = session; }

    public UserDaoImpl(Session session) {
        setSession(session);
    }

    /**
     * Récupére un User pour un login et password donné
     *
     * @param login
     * @param password
     * @return Operateur
     */
    public User getUser(String login, String password) {
        log.debug("Recherche du User login : " + login);
        try {
            Query q = getSession().createQuery("from User u where u.login =
:login and u.password = :pwd");
...
}

Tapestry-ioc is responsible to get the constructor call :

   public static void bind(ServiceBinder binder) {
     ...
     binder.bind(UserDao.class, UserDaoImpl.class);
     ...
   }


No idea, still investigating. I tried to clear tomcat cache, check the
libraries... maybe something missing somewhere.

T5.0.6 for core/annotation and ioc and T5.0.5 for tapestry-hibernate, maybe
it is that the problem.
-- 
Michael Bernagou
Java Developper

Reply via email to