I'm having problems with Tapestry 5.2.4 and injecting a Logger into a service 
and a component.

My AppModule:
    public static void bind(ServiceBinder binder) {
        binder.bind(RandomNumberGenerator.class, 
SecureRandomNumberGenerator.class);
        binder.bind(UserService.class, UserServiceImpl.class);
    }

My component class
public class Layout
{
    @Inject
    private Logger logger;
}

works as expected, but my service class throws an exception.

public class UserServiceImpl implements UserService {

    @Inject
    private Logger logger;

    @Inject
    private RandomNumberGenerator randomNumber;
}

The injection of the RandomNumberGenerator also works as expected, but not the 
logger:

[DEBUG] AppModule.UserService Loading class test.services.impl.UserServiceImpl.
[DEBUG] AppModule.UserService Marking class test.services.impl.UserServiceImpl 
to be (re-)loaded
[DEBUG] AppModule.UserService BEGIN Analyzing test.services.impl.UserServiceImpl
[DEBUG] AppModule.UserService   END Analyzing test.services.impl.UserServiceImpl
[DEBUG] AppModule.UserService Invoking constructor public 
test.services.impl.UserServiceImpl().
[ERROR] ioc.Registry No service implements the interface org.slf4j.Logger.
[ERROR] ioc.Registry Operations trace:
[ERROR] ioc.Registry [ 1] Realizing service RegistryStartup
[ERROR] ioc.Registry [ 2] Invoking org.apache.tapestry5.ioc.internal.services.RegistryStartup(Logger, List) (at RegistryStartup.java:36) via org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at TapestryIOCModule.java:55)
[ERROR] ioc.Registry [ 3] Determining injection value for parameter #2 
(java.util.List)
[ERROR] ioc.Registry [ 4] Collecting ordered configuration for service 
RegistryStartup
[ERROR] ioc.Registry [ 5] Invoking method 
test.services.AppModule.initApplication(UserService, JdbcTemplate, Logger) (at 
AppModule.java:174).
[ERROR] ioc.Registry [ 6] Reloading class test.services.impl.UserServiceImpl.
[ERROR] ioc.Registry [ 7] Calculating injection value for field 'logger' 
(org.slf4j.Logger)
[ERROR] ioc.Registry [ 8] Resolving object of type org.slf4j.Logger using 
MasterObjectProvider

Caused by: org.apache.tapestry5.ioc.internal.OperationException: No service 
implements the interface org.slf4j.Logger.
    at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:102)
    at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:69)
    at 
org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68)
    at 
org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1063)
    at 
org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl.provide(MasterObjectProviderImpl.java:41)
    at 
$MasterObjectProvider_12d2eb17ffe.provide($MasterObjectProvider_12d2eb17ffe.java)
    at 
org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:811)
    at 
org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getObject(ObjectLocatorImpl.java:50)
    at 
org.apache.tapestry5.ioc.internal.util.InternalUtils$4.run(InternalUtils.java:368)
    at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:50)
    at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:47)
    at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65)
    at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:46)
    at 
org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:56)
    at 
org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1058)
    at 
org.apache.tapestry5.ioc.internal.util.InternalUtils.injectIntoFields(InternalUtils.java:353)
    at 
org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:64)
    ... 136 more
Caused by: java.lang.RuntimeException: No service implements the interface 
org.slf4j.Logger.
    at 
org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:670)
    at 
org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocatorImpl.java:45)
    at 
org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl$1.invoke(MasterObjectProviderImpl.java:56)
    at 
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65)
    ... 151 more

If i delete the injection of the logger in my UserService everything works fine.

Is it not possible to inject a Logger into a service implementation? Why? It looks strange to me to mix Logger instantiation in service implementation (LoggerFactory.getLogger()) and component (@Inject) classes.

Regards
Robert


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to