Duda: Ioc Tapestry 5

Buen día,

En un proyecto tengo 2 módulos o subproyectos: web y services

En el módulo "web" del paquete "mx.com.domain.web.services" tengo en el AppModule.java lo siguiente en el método bind:

 public static void bind(ServiceBinder binder)
    {
        binder.bind(IUserService.class, UserService.class);
........
    }

Las clases IUserService y UserService se encuentran en el módulo services, en el paquete "mx.com.domain.services"

public interface IUserService {
    Usuario getUserById(String userId, String password,String ip, String idSesion, String idioma);
    Mensaje getMensajeById(Mensaje mensaje);
}
public class UserService implements IUserService{

    public Usuario getUserById(String userId, String password,
                               String ip, String idSesion, String idioma) {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try{
            Usuario usuario = new Usuario(userId,password,ip,idioma, idSesion);
            sqlSession.selectList("IUsuario.getUsuarioById", usuario);
            return usuario.getUsuarioList().get(0);
        }finally{
            sqlSession.close();
        }
    }

    public Mensaje getMensajeById(Mensaje mensaje){
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try{
            sqlSession.selectList("IUsuario.getMensajeById", mensaje);
            List<Mensaje> mensajes = mensaje.getListaMensajes();
            return mensajes.get(0);
        }finally{
            sqlSession.close();
        }
    }
}

Ahora bien, en el módulo web tengo la siguiente clase:

package mx.com.domain.web.security;

public class UsuarioRealm extends AuthorizingRealm {
   @Inject
    private IUserService userService;
.....
.....
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            userService.getUserById(...............);
     }
}

Es posible hacer la inyección? Es decir, quiero inyectar un servicio que se encuentra en otro módulo del proyecto. El servicio se encuentra dentro de un package "services" , sin embargo no hace la inyección.

De antemano, gracias!!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de WinDoctor

Por si alguien no pudo dormir

Por si alguien no pudo dormir por el pendiente de este problema, les comento que la solución fue agregar un @Autobuild al Realm, pues estaba haciendo esto:

   public static void contributeWebSecurityManager(Configuration<Realm> configuration) {
        UsuarioRealm realm = new UsuarioRealm();
        configuration.add(realm);
    }

En lugar de crear el objeto manual, con la anotación @Autobuild se crea una instancia UsuarioRealm con sus dependencias.

   public static void contributeWebSecurityManager(Configuration<Realm> configuration, @Autobuild UsuarioRealm realm) {
        configuration.add(realm);
    }
Imagen de ezamudio

Tapestry

Hace años abandoné Tapestry y me pasé a Grails. Ahorita estamos entre que si dejamos Grails por otra cosa (vert.x? spring boot?) o qué.

Imagen de WinDoctor

TP5

Fue por un post tuyo sobre Tapestry que me dió curiosidad revisar algo de ello.

En lo personal me ha gustado, me late que se pueden realizar pruebas unitarias de forma más limpia que con otros frameworks más populares como JSF... aunque si, TP5 tiene algunos problemas con compatibilidades, incluso entre sus propias versiones 5.3.X

Imagen de ezamudio

por eso lo abandonamos

Eso de las incompatibilidades es la razón por la que abandonamos el framework. Teníamos apps en Tapestry 3. Nunca las migramos a T4 porque era casi un rewrite; y para T5 era definitivamente un rewrite. Pero se veía muy bien el framework y lo empezamos a usar en 5.0; luego la 5.1 tenía varias broncas de incompatibilidad incluso a nivel fuentes con la 5.0; luego la 5.2 era lo mismo y ya no le creo nada a Lewis Ship y por eso mejor nos movimos a otro. Pero pues parece que ahora de Grails 2.3 a 2.4 es el mismo cuento.

Imagen de WinDoctor

Pasa con varios frameworks

También pasará algo así con AngularJS en su próxima versión, será totalmente incompatible según entiendo.

Pasa con el hardware

Tema relacionado: También pasa con el hardware. Aquellos que han tenido la necesidad de incrementar la RAM de su equipo, han tenido que revisar si es DDR, DDR2, DDR3 o DDR4.