Version 4

    This article shows how to call EJB from Mbean


    Let's talk about testing EJB in target environment. Assume EJB bean is ready but their clients not. It is not trivial issue to test the bean and keep whole application unchanged:

    • Remote bean can be called vie RMI, but it need a client application
    • Local bean can configured as remote, but it changes application. Moreover, method parameters must be Serializable
    • Test client may be added to application (remote bean, JSP etc.) but it still pollutes application


    Elegant solution is Mbean!


    Let's start:


    1. First create EJB


      public interface Adder {

          int add(int a, int b);



      // implementation


      public class AdderBean implements Adder {

          public int add(int a, int b) {

              return a + b;



    2. Deploy application on Jboss
    3. Create Mbean
      MBean Interface

      package adder;


      import org.jboss.ejb3.annotation.Management



      public interface AdderService {

          int getA();

          void setA(int a);


          int getB();

          void setB(int b);


          int add();




      Mbean Implementation

      package adder;


      import javax.naming.InitialContext;

      import javax.naming.NamingException;

      import javax.rmi.PortableRemoteObject;

      import org.jboss.ejb3.annotation.Service;


      import adder.Adder;

      @Service (objectName = "adder:service=AdderMbean")

      public class AdderMbean implements AdderService {


          private int a = 2;


          private int b = 2;


          public int getA() {

              return a;



          public void setA(int a) {

              this.a = a;



          public int getB() {

              return b;



          public void setB(int b) {

              this.b = b;



          public int add() {

              try {

                  InitialContext ctx = new InitialContext();


                  // if AdderBean is deployed in jar instead ear,

                  // use ctx.lookup("AdderBean/local");

                  Object ref = ctx.lookup("adder-ear-1.0/AdderBean/local");


                  Adder adder = (Adder) PortableRemoteObject.narrow(ref,Adder.class);

                  return adder.add(a, b);


              } catch (NamingException e) {


                  return 0;




    4. Compile and package mbean into jar
    5. Deploy mbean jar on Jboss
    6. Open JMX console (http://localhost:8080/jmx-console/), find and enjoy AdderMBean


    Please note that the example is made for Jboss 5 and will not work in Jboss 4! (


    Attached file contain example sources as Maven projects

    To build ear, go to adder-ee and type mvn install. Ear is in adder-ear/target

    To build mbean, go to adder-mbeans and type mvn install. Jar is in target