Hello!
I’m using WildFly 9 and I would like to use inter-artifact communication between artifacts (WARs, EJB JARs, EARs) deployed inside the same application server as easily as possible. EJB 3.1 spec brought many simplifications; I wonder if it is possible to simply use the @EJB annotation to inject remote beans into objects that need to communicate across artifact boundaries? If not, what’s the most straightforward way to achieve this?
Here’s a concrete scenario:
I have a web application packaged as a WAR that needs to use a service from a large monolithic application that is packaged as an EAR. I expect to annotate the service interface with @Remote, extract it into a separate API JAR and reference the API JAR from both the WAR and EAR projects. Then I expect to implement the service in the EAR and inject it (using the interface) with the @EJB annotation as an instance field into a servlet in the WAR.
I published a simplified project skeleton to GitHub as it is much easier to express this in code, see
https://github.com/mrts/remote-ejb-injection .
It’s a Maven project with the following modules:
Build it with `mvn package` and deploy `service-ejb-impl/target/service-ejb-impl-1.0-SNAPSHOT.jar` and `service-client/target/service-client-1.0-SNAPSHOT.war` to WildFly to run it.
I did purposefully not package the EJB JAR into an EAR as I would prefer to use the simplest solution possible – or is an EAR required?
Currently WAR deployment fails with the following exception:
org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0406: No EJB found with interface of type 'ee.mrts.service.HelloService' for binding ee.mrts.servlet.HelloServlet/helloService
What needs to be changed to make it work?
Thanks in advance,
Mart