How to call a remote EJB 3.1 with its client on OpenLiberty

262 Views Asked by At

I'm new to Open Liberty. I need to call an EJB 3.1 deployed on WAS 8.5 but I can't find any documentation or tutorial on how to do it.

Is this feature present in OpenLiberty? Which features should i enable on my server.xml? And what is the code to call the server?

UPDATE

After reading some documentation, I've tried to make the call with the following server.xml

<server description="Sample Liberty server">
    <featureManager>
        <feature>webProfile-7.0</feature>
    </featureManager>

    <variable name="default.http.port" defaultValue="9080" />
    <variable name="default.https.port" defaultValue="9443" />
    <variable name="app.context.root" defaultValue="ServletSample" />

    <webApplication location="open-liberty-template.war"
        contextRoot="/test" />

    <keyStore id="defaultKeyStore" password="keypassword"/>

    <!-- EXAMPLE TRACE: when you visit the /health endpoint, additional traces 
        are logged in the trace.log file. -->
    <!-- <logging traceSpecification="com.ibm.ws.microprofile.health.*=all"></logging> -->

    <httpEndpoint host="*" httpPort="${default.http.port}"
        httpsPort="${default.https.port}" id="defaultHttpEndpoint" />

    <httpDispatcher enableWelcomePage="false" />


</server>

and Servlet

@WebServlet("/RemoteTxAttrServlet")
public class TestServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Properties p = new Properties();
        // p.put(Context.PROVIDER_URL, "iiop://10.64.2.93:2821");
        Object found = null;
        try {
            Context c = new InitialContext();
            found = c.lookup(
                    "corbaname::ip:port#ejb/global/ear-module/ejb-module/BeanName!package.Interface");
        } catch (NamingException e) {
            e.printStackTrace();
        }

        System.out.println(found);

    }
}

but I obtain the following Exception:

[INFO] [err] javax.naming.NameNotFoundException: Intermediate context does not exist: corbaname::10.64.2.93:2821#ejb/global
[INFO] [err]    at com.ibm.ws.jndi.internal.ContextNode.getTargetNode(ContextNode.java:125)
[INFO] [err]    at [internal classes]
[INFO] [err]    at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
[INFO] [err]    at it.aci.grpc.services.TestServlet.doGet(TestServlet.java:27)
[INFO] [err]    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
[INFO] [err]    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
[INFO] [err]    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1258)
[INFO] [err]    at [internal classes]
[INFO] [err]    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[INFO] [err]    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[INFO] [err]    at java.base/java.lang.Thread.run(Thread.java:834)

furthermore i cannot find the javax.rmi.PortableRemoteObject on the classpath to norrow the Object reference to my target remote interface.

How can i fix it?

0

There are 0 best solutions below