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
------------------------------
Original Message:
Sent: Tue July 12, 2022 06:09 AM
From: adil safieddine
Subject: connect IIB too EJB
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
------------------------------