You don't need the MANIFEST.MF. You do need to name your module correctly, it should be AppModule. The documention is *very clear* on the naming for that.
Also, you should consider letting Tapestry IoC inject the Log ( org.apache.commons.logging.Log) for your service; cleans up a lot of code that way. This will be On 5/29/07, Blackwings <[EMAIL PROTECTED]> wrote:
So, I'm now on 5.04 and I re-read the documentation about ioc to be sure I didn't do a mistake when I declared my service. The module is final and follow the naming convention: package papo.ioc.services; public final class UserModule { public UserService build() { return new UserServiceImpl(); } } And I declared it in the MANIFEST.MF under webroot/META-INF : Manifest-Version: 1.0 Tapestry-Module-Classes: papo.ioc.services.UserModule The service interface seems ok: package papo.ioc.services; import papo.exception.PapoException; import papo.model.User; public interface UserService { public User getAuthenticatedUser(String login, String password) throws PapoException; } The implementation looks normal: package papo.ioc.services; import org.apache.log4j.Logger; import papo.dao.UserDao; import papo.exception.PapoException; import papo.model.User; public class UserServiceImpl implements UserService { /** Obtain a suitable logger */ private static Logger logger = Logger.getLogger(UserServiceImpl.class.getName()); public User getAuthenticatedUser(String login, String password) throws PapoException { UserDao dao = new UserDao(); User user = null; try { user = dao.searchUser(login, password); } catch (PapoException pe) { logger.error("The authentication has failed !!", pe); throw new PapoException("The authentication has failed !!"); } return user; } } and the I use it in my Start page: @Inject @Service("UserService") private UserService _userService; String onSuccess() { String success = "Home"; String failure = "Start"; try { _user = _userService.getAuthenticatedUser(_login.getLogin(), _login.getPassword()); } catch (PapoException pe) { _message = "La procedure d'identification a rencontré un probleme !!"; return failure; } return success; } But I still have the error : java.lang.ClassNotFoundException caught an exception while obtaining a class file for papo.pages.Start exception java.lang.RuntimeException: Error obtaining injected value for field papo.pages.Start._userService: No service implements the interface papo.ioc.services.UserService. What can I try now? 2007/5/29, Blackwings <[EMAIL PROTECTED]>: > > I was using the 5.03. I just changed for the 5.04 then I tried your proposition : > > "No service implements the interface papo.ioc.services.UserService." > > But my implementation, UserServiceImpl is in the same package than its interface UserService and implements it. > The module UserModule that contains the buildUserService method and return the UserService is also in this package... > > What did I miss?? > > > 2007/5/29, Davor Hrg <[EMAIL PROTECTED]>: > > > try: > > @Inject > > private UserService _userService; > > > > you haven't mentioned the version > > code above is for 5.0.4, I'm not sure for older versions > > > > Davor Hrg > > > > On 5/29/07, Blackwings <[EMAIL PROTECTED]> wrote: > > > > > > Hi, > > > > > > I think I'm not using correctly the tapestry-ioc since my page call itself > > > my module to get the service implementation instance (as service): > > > > > > UserModule > > > > > > public class UserModule { > > > > > > public static UserService buildUserService() { > > > return new UserServiceImpl(); > > > } > > > } > > > > > > UserService > > > > > > public interface UserService { > > > public User getAuthenticatedUser(String login, String password) throws > > > PapoException; > > > } > > > > > > UserServiceImpl > > > > > > public class UserServiceImpl implements UserService { > > > public User getAuthenticatedUser(String login, String password) throws > > > PapoException { > > > [code] > > > return user; > > > } > > > > > > } > > > > > > Start > > > > > > [code] > > > private UserService _userService; > > > > > > String onSuccess() { > > > [code here] > > > _userService = UserModule.buildUserService (); > > > _user = _userService.getAuthenticatedUser(_login.getLogin(), > > > _login.getPassword()); > > > > > > ****** > > > > > > My page call itself the build method... so my page is hardly linked to the > > > ioc but this is wrong. > > > I thought about something like : > > > > > > [code] > > > @InjectService("UserService") > > > private UserService _userService; > > > > > > String onSuccess() { > > > [code here] > > > _user = _userService.getAuthenticatedUser(_login.getLogin(), > > > _login.getPassword()); > > > > > > But it doesn't compile and the notation found in the documentaiton : > > > @Inject > > > @Service("UserService") > > > doesn't exist anymore in the tapestry-core... > > > > > > Any idea? > > > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Howard M. Lewis Ship TWD Consulting, Inc. Independent J2EE / Open-Source Java Consultant Creator and PMC Chair, Apache Tapestry Creator, Apache HiveMind Professional Tapestry training, mentoring, support and project work. http://howardlewisship.com