es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Interfaz CDI de proyectos externos de wildfly

Mi idea es tener 3 proyectos:

  1. com.tests.interfaces
  2. com.tests.services
  3. com.tests.schedulers

com.tests.interfaces básicamente es:

@Remote
public interface IFoo {
    public String test(); 
}

com.tests.services es:

@Stateless(name = "IFoo")
public class FooBean implements IFoo {

    public String test() {
        return "Hello world";
    }

}

Estoy desplegando el proyecto “services” y funciona bien usando wildfly 24.0.0. Luego intento tener otro proyecto .war llamado com.tests.schedulers que se ve así:

@Stateless
public class TestEjb {

    @EJB(beanName = "IFoo")
    IFoo iFoo;

    public void teste() {
        iFoo.test();
    }

}

@Singleton
public class ExecutorMainframeProcessamento {

    @EJB
    TestEjb testEjb;

    @Schedule(second = "*/5", minute = "*", hour = "*", dayOfWeek = "*", persistent = false, info = "Test EJB")
    public void atSchedule() {
        testEjb.test();
    }
}

Pero no se puede implementar y esta es la parte relevante de la salida de wildfly (el mismo servidor para todos los .wars):

org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0405: No se encontraron beans empresariales Jakarta con una interfaz del tipo com.tests.interfaces.IFoo y nombre IFoo para la vinculación com.tests.schedulers.TestEjb/iFoo

¿Qué me falta o qué estoy haciendo mal?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el error de implementación se debe a que la clase TestEjb en el proyecto com.tests.schedulers no puede encontrar un Jakarta Enterprise Bean con el nombre IFoo para vincular la variable iFoo. Una posible solución sería tener el proyecto com.tests.interfaces y el proyecto com.tests.services empaquetados en un solo archivo jar e incluirlo como una dependencia en el proyecto com.tests.schedulers. De esta manera, la clase TestEjb puede acceder a la interfaz IFoo y al bean que la implementa.

    Otra posibilidad es asegurarse de que el proyecto com.tests.services se despliega antes que el proyecto com.tests.schedulers. Esto se puede lograr configurando el orden de implementación en Wildfly.

    Por último, es importante asegurarse de que las convenciones de nombres utilizadas en el código sean consistentes con la configuración en Wildfly. Por ejemplo, si el nombre del bean especificado en el proyecto services es “IFoo”, entonces se debe usar el mismo nombre al inyectar el bean en la clase TestEjb.

    En general, se recomienda verificar la configuración de Wildfly, las convenciones de nombres y el empaquetado de los proyectos para resolver cualquier error potencial.

Comments are closed.