When Is PortableRemoteObject#narrow needed?

PortableRemoteObject#narrow was the default of casting of remote objects to the desired type:


Context context = new InitialContext();
Object raw = context.lookup(jndiName);
MyRemoteType type = (MyRemoteType)PortableRemoteObject.narrow(raw, MyRemoteType.class);

According to JavaDoc, the method narrow "narrows" the abstract remote type to the requested one:

"Checks to ensure that an object of a remote or abstract interface type can be cast to a desired type."

PortableRemoteObject#narrow was widely used within ServceLocator pattern implementations. In the early J2EE years most application servers relied on CORBA/IIOP (RMI over IIOP). In the CORBA / IIOP context casting and inheritance is challenging and requires the "narrowing".

Later,the popular appservers switched to optimized RMI, or even proprietary binary implementations where the PortableRemoteObject#narrow was no more required. However, for compatibility and portability reasons it was a good programming style to use always use PortableRemoteObject#narrow.

In modern Java EE architectures InitialContext#lookup of EJB / CDI components, as well as, IIOP-based communication are dying. "Don't distribute" becomes a best practice: applications are working as much as only possible locally and only exposing coarse grained interfaces, mostly via JAX-RS.

[See also an in-depth discussion in the "Real World Java EE Patterns--Rethinking Best Practices" book (Second Iteration, "Green Book"), page 343 in, chapter "Bean Locator"]

See you at Java EE Workshops at MUC Airport, particularly at the Java EE User Architectures workshop!


NEW online workshop: WebStandards Igniter (online)

Airport MUC workshops: Java EE 8, Java 9: Bootstrap, Effective, Architectures, Single Page Apps, Progressive Web Apps, HTML 5, ES 6, CSS 3 and Microservices

Podcast: airhacks.fm and newsletter: airhacks.news

A book about rethinking Java EE Patterns

Comments:

I cannot feature the day I will ask my users to do data input through a clumsy browser interface.

Swing/JavaFX clients live!

Websockets is the best thing to happen to Java clients since RMI was introduced!

Browsers are only good for displaying data -- not for inputting data.

Posted by Chuck Davis on October 11, 2013 at 11:33 PM CEST #

Post a Comment:
  • HTML Syntax: NOT allowed
realworldpatterns.com
Online Workshops
...the last 150 posts
...the last 10 comments
License