App Connect

App Connect

Join this online user group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
  • 1.  connect IIB too EJB

    Posted Tue July 12, 2022 06:09 AM
    Hello ,

    I work with IIB 9.0 and i want to publish my EJB as API .

    But I have an  error in the line 29 in my class (below)  the error is : cannot cast class java.lang.stub.java.rmi._Remote_Stub to interface ackNoAckHome

    Public class CallAckNoAckEJB_JavaCompute extends MbJavaComputeNode {

    public void evaluate(MbMessageAssembly inAssembly) throws MbException {
    MbOutputTerminal out = getOutputTerminal("out");
    MbOutputTerminal alt = getOutputTerminal("alternate");

    MbMessage inMessage = inAssembly.getMessage();

    // create new message
    MbMessage outMessage = new MbMessage(inMessage);
    MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,outMessage);

    try {
    // ----------------------------------------------------------
    // Add user code below

    String response = null;
    String responseMessage = null;

    Properties properties = new Properties();
    properties.put(Context.PROVIDER_URL, "iiop://localhost:2809");
    properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.
    WsnInitialContextFactory");

    try {

    Context initialContext = new InitialContext(properties);
    Object obj = initialContext.lookup("ejb/com/acme/ejbs/AckNoAckHome");
    AckNoAckHome ejbHome = (AckNoAckHome)javax.rmi.PortableRemoteObject.narrow(obj,AckNoAckHome.class);

    AckNoAck ackNoAck = ejbHome.create();
    responseMessage = ackNoAck.getAck();
    response = "Ack";
    } catch(Exception e) {
    responseMessage = e.getMessage();
    response = "NoAck";
    }

    MbElement cursor = outMessage.getRootElement().getFirstElementByPath("/XML/AckNoAck");
    cursor.createElementAsLastChild(MbElement.TYPE_NAME,"Response",null);
    cursor.getLastChild().createElementAsLastChild(MbElement.TYPE_NAME,response,null);
    cursor.getLastChild().getLastChild().createElementAsLastChild(MbElement.TYPE_VALUE,null,
    responseMessage);

    // End of user code
    // ----------------------------------------------------------

    // The following should only be changed
    // if not propagating message to the 'out' terminal
    out.propagate(outAssembly);

    } finally {
    // clear the outMessage
    outMessage.clearMessage();
    }
    }
    }

    Best Regrads
    Adil

    ------------------------------
    adil safieddine
    ------------------------------


  • 2.  RE: connect IIB too EJB

    Posted Wed July 13, 2022 05:09 AM
    The answer is really simple. Your class declaration is wrong. It needs to implement the interface ackNoAckHome. The interface name is a little bit strange because I would have expected it to start with a Capital.


    Anyways the JCN should not implement that interface. It should instanciate a class that does... and again, this is not a J2EE server => your design is flawed.
    Have your main EJB dump the message to MQ and pick it up with an MQInput Node in the flow.

    You should not use RMI to get the information. The server should write the information to an MQ Queue. Or you could write a standalone Java program that gets the information from the EJB and dumps it into an MQ Queue. You can then use IIB / ACE to modify the payload.

    ------------------------------
    Francois Brandelik
    ------------------------------