Confusion in PortableRemoteObject.narrow() method

In EJB 1.0 reference of home object is obtained through external casting as HelloHome home = (HelloHome)ctx.lookup("HelloHome")
My question is that since IIOP has not been designed for Java, but for generic languages, and this means that there are some limitations. Some languages, in fact, do not have the concept of casting.
Still why we have to cast the Object if we use PortableRemoteObject.narrow method for obtaining the home interface reference in EJB2.0.
HelloHome home = (HelloHome)javax.rmi.PortableRemoteObject.narrow(object, HelloHome.class)

If the client is built using Java, you can not explicitly cast from the Naming.lookup() function. Instead, you must use lookup() to return a generic java.lang.Object, and then cast to the specific object type with the PortableRemoteObject.Narrow(objectReference, interfaceName) method.

Similar Messages

  • PortableRemoteObject.narrow() method

    Hi,
    I usually use this method in case of looking for some remote home interface. But recently I found some EJB examples, where an author ommited the PortableRemoteObject.narrow method. Actually the source code was generated by Lomboz.
    This unusual procedure made me to prepare some tests. I made some EJB bean and its interfaces, after that I made a little change inside on one cpy of home interface, that this one was out of date. In the end I generated appropriate client in two ways:
    - using PortableRemoteObject.narrow method
    - unusing PortableRemoteObject.narrow method
    The results, when I used PortableRemoteObject.narrow method and when I unused it is similar, both resposed by java.lang.ClassCastException
    The small difference was, in order to use PortableRemoteObject.narrow method I got:
    at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(Unknown Source)
         at javax.rmi.PortableRemoteObject.narrow(Unknown Source)
    Ommiting this method I got only;
    java.lang.ClassCastException: $Proxy0
    Well, in both ways I observed the same final exception:
    java.lang.ClassCastException, which good explains what happend wrong. What really is better to use PortableRemoteObject.narrow method based on my above experiences?
    Thank for some suggestions
    Krzysztof

    You need to do the .narrow() method on anything that comes across RMI. The reason is that you have no guarantee that the thing coming across RMI is a Java object. It's possible to send something other than a Java object.
    If your client is using a local interface instead of a remote interface, the narrow() is not required.

  • Why PortableRemoteObject.narrow()

    Hello,
    Can any one please suggest me the difference in looking Up of the components in 2 ways..??
    1) HelloHome home = (HelloHome)ctx.lookup("HelloHome")
    2) Object ref = getInitialContext().lookup(eb/HelloBean);
    HelloHome home = (HelloHome)javax.rmi.PortableRemoteObject.narrow(ref, HelloHome.class)
    Why we need option 2 when we get a home object when we make a look up as in 1.
    why PortableRemoteObject.narrow()
    Please make ur suggestions.
    Thanks.

    Hi,
    From an article at http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/ejb-tier/ejb-tier9.html
    Type narrowing is needed because many application servers use RMI-IIOP as the communication protocol to access remote beans. However, some application servers do not use RMI-IIOP and hence allow the use of Java language typecasts as well. For portability you cannot rely on an application server allowing Java language typecasts; you should always use the PortableRemoteObject.narrow method. The overhead on this method call is usually quite small
    -Amol

  • ???  PortableRemoteObject.narrow()  ???  totally confusing

    Hi,
    I tried to execute the J2ee tutorial example (ConverterApplication) bean...
    I got succeed in doing that...
    But while writing the ApplicationClient code i used
    PortableRemoteObject.narrow() to get the HomeObject's reference... I know that there is some RMI-IIOP and CORBA stuff involved in that..
    But my client is a pure java client not a CORBA client ...so i tried removing this
    PortableRemoteObject.narrow() line and i directly typecated the HomeObject...
    It is also working ....
    So whats the whole purpose of writing PortableRemoteObject.narrow() for a java client ?? Becoz we know that our client is in Java and EJB is also written in java

    http://www.jguru.com/faq/view.jsp?EID=734137
    http://www.theserverside.com/discussions/thread.tss?thread_id=29200
    Richard.

  • PortableRemoteObject.narrow

    Why is it necessary to use and cast the result of this method call, which appears to return the same object as was passed as the first argument? In other words, why do this:
    Object myObj = ctx.lookup(MYHOME);
    MyHome myHome = (MyHome)
    PortableRemoteObject.narrow(myObj, MyHome.class);
    MyEjb myEjb = myHome.create();
    -in code that must know each EJB, when you can do this:
    //In a generic HomeFactory class
    Object myObj = ctx.lookup(MYHOME);
    Class beanHome = Class.forName(MYHOME);
    PortableRemoteObject.narrow(myObj, beanHome);
    return myObj
    //In some other class
    MyHome myHome = (MyHome) HomeFactory.getHome(MYHOME);
    MyEjb = myHome.create();
    I left out the try-catch blocks and all of that for compactness. The reason I ask is because a generic Home Factory can store EJBHome objects in a collection, testing them first and returning them without creating the actual remote reference, so it does not need to know the specific EJB, allowing the specific client code to cast the generic Object to the specific EJBHome object.
    A Sun-certified instructor once told me that it was absolutely necessary to use the Object returned from the narrow method because it performed some essential RMI activity on the object, but I have never had a problem using it the second way I describe above in the HomeFactory. Also, I have never been able to find any documentation to substantiate his claim. Any thoughts as to the necessity of using the object returned from the narrow method? It appears to be the exact same object that is passed in to the method, and likely un-changed at that.

    The narrow method is there to allow an implementation to do some extra work or return a different object if it needs to. It appears that your implementation does not need to do these things so it just returns the object that was passed. If you take your shortcut, you will limit yourself to running only on your current implementation. If you try to switch implementations or even upgrade to a later version it might break. If you follow the correct method the your code will be portable.

  • Difference between narrow() method usage and simple class cast for EJB

    Hi,
    I have a very simple question:
    what is the difference between PortableRemoteObject.narrow(fromObj,
    toClass) method usage and simple class cast for EJB.
    For example,
    1)
    EJBObject ejbObj;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)PortableRemoteObject.narrow(ejbObj,ABean.class);
    OR
    2)
    EJBObject bean;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)ejbObj;
    Which one is better?
    P.S. I'm working with WL 6.1 sp2
    Any help would be appreciated.
    Thanks in advance,
    Orly

    [email protected] (Orly) writes:
    Hi,
    I have a very simple question:
    what is the difference between PortableRemoteObject.narrow(fromObj,
    toClass) method usage and simple class cast for EJB.
    For example,
    1)
    EJBObject ejbObj;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)PortableRemoteObject.narrow(ejbObj,ABean.class);
    OR
    2)
    EJBObject bean;
    // somewhere in the code the home.create() called for bean ...
    ABean a = (ABean)ejbObj;
    Which one is better?(1) is mandated by the spec. It is required because CORBA systems may
    not have sufficient type information available to do a simple case.
    P.S. I'm working with WL 6.1 sp2 You should always use PRO.narrow()
    andy

  • Javax.rmi.portableRemoteObject.narrow

    Hi
    Pls tell me why we narrow the instance of the object we looked up,
    before type casting it to a home referance by using javax.rmi.portableRemoteObject.narrow(Object,Home.class)

    In the early days of EJB this call was required to ensure portability due to some intracacies of how
    RMI-IIOP and CORBA ORBs are implemented. Some implementations are able to directly return
    the correctly typed object from the lookup, but in others the extra PortableRemoteObject.narrow
    call is necessary, so always using it ensures portability.
    Starting in Java EE 5, PortableRemoteObject.narrow is not needed if the code is either accessing
    a Remote 3.0 Business Interface or if the code is accessing a 2.x style Home object using
    @EJB or the new EJBContext.lookup method.
    --ken                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • JNDI in ActiveX : javax.rmi.PortableRemoteObject.narrow() can't work ?

    Hi All,
    I got a big head ache of this problem for several days, much appreciated if
    I can get help from you.
    The problem is, I wrote an EJB and already deployed it into Weblogic5.1. I
    also wrote a java EJB client to access this EJB. Everything seemed ok at
    this moment.
    The problem occured after i convert this EJB client to ActiveX and test it
    with Microsoft ActiveX Control Test Container. I log each step in the
    ActiveX, and find the problem is caused by
    javax.rmi.PortableRemoteObject.narrow(). Below is my source code and log
    information. My environment is Server side(weblogic5.1),Client side(java
    run-time3.1 with plug-in).
    Source code:
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFacto
    ry");
    env.put(Context.PROVIDER_URL,"t3://"+ip+":"+port);
    try{
    Log("Init jndi ");
    InitialContext ctx = new InitialContext(env);
    Log("Search Home ");
    Object obj = ctx.lookup("ServiceManagerHome");
    Log("home is "+obj);
    Log("narrow from "+obj.getClass().getName());
    Log("narrow to "+ServiceManagerHome.class.getName());
    obj = PortableRemoteObject.narrow(obj,ServiceManagerHome.class);
    Log("narrow home is "+obj);
    serviceHome = (ServiceManagerHome)obj;
    Log("cast home"+serviceHome);
    serviceManager = serviceHome.create();
    Log("Create EJB bean "+serviceManager);
    } catch (Exception e){
    Log("Err-"+e);
    Log("Err-"+e.getLocalizedMessage());
    Log("Err-"+e.getMessage());
    Log information for ActiveX:
    Init jndi
    Search Home
    home is ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259]
    narrow from rm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub
    narrow to crm.service.ejbimpl.ServiceManagerHome
    Err-java.lang.ClassCastException
    Err-null
    Err-null
    Log information for java EJB Client:
    Init jndi
    Search Home
    home is
    crm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub@-4611900794319518
    045S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259
    narrow from crm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub
    narrow to crm.service.ejbimpl.ServiceManagerHome
    narrow home
    crm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub@-4611900794319518
    045S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259]
    cast
    homecrm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub@-461190079431
    9518045S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259
    Create serviceManager
    crm.service.ejbimpl.ServiceManagerBeanEOImpl_ServiceStub@-461190079431951804
    5S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome_EO [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/258

    Contact support.
    Yuan Ming Lei wrote:
    Hi All,
    I got a big head ache of this problem for several days, much appreciated if
    I can get help from you.
    The problem is, I wrote an EJB and already deployed it into Weblogic5.1. I
    also wrote a java EJB client to access this EJB. Everything seemed ok at
    this moment.
    The problem occured after i convert this EJB client to ActiveX and test it
    with Microsoft ActiveX Control Test Container. I log each step in the
    ActiveX, and find the problem is caused by
    javax.rmi.PortableRemoteObject.narrow(). Below is my source code and log
    information. My environment is Server side(weblogic5.1),Client side(java
    run-time3.1 with plug-in).
    Source code:
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFacto
    ry");
    env.put(Context.PROVIDER_URL,"t3://"+ip+":"+port);
    try{
    Log("Init jndi ");
    InitialContext ctx = new InitialContext(env);
    Log("Search Home ");
    Object obj = ctx.lookup("ServiceManagerHome");
    Log("home is "+obj);
    Log("narrow from "+obj.getClass().getName());
    Log("narrow to "+ServiceManagerHome.class.getName());
    obj = PortableRemoteObject.narrow(obj,ServiceManagerHome.class);
    Log("narrow home is "+obj);
    serviceHome = (ServiceManagerHome)obj;
    Log("cast home"+serviceHome);
    serviceManager = serviceHome.create();
    Log("Create EJB bean "+serviceManager);
    } catch (Exception e){
    Log("Err-"+e);
    Log("Err-"+e.getLocalizedMessage());
    Log("Err-"+e.getMessage());
    Log information for ActiveX:
    Init jndi
    Search Home
    home is ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259]
    narrow from rm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub
    narrow to crm.service.ejbimpl.ServiceManagerHome
    Err-java.lang.ClassCastException
    Err-null
    Err-null
    Log information for java EJB Client:
    Init jndi
    Search Home
    home is
    crm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub@-4611900794319518
    045S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259
    narrow from crm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub
    narrow to crm.service.ejbimpl.ServiceManagerHome
    narrow home
    crm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub@-4611900794319518
    045S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259]
    cast
    homecrm.service.ejbimpl.ServiceManagerBeanHomeImpl_ServiceStub@-461190079431
    9518045S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/259
    Create serviceManager
    crm.service.ejbimpl.ServiceManagerBeanEOImpl_ServiceStub@-461190079431951804
    5S155.161.96.26:[7001,7001,7002,7002,7001,-1] ServiceManagerHome_EO [
    -4611900794319518045S155.161.96.26:[7001,7001,7002,7002,7001,-1]/258

  • EJB P.R.O.narrow method returns a null reference though object is valid

    All,
    I'm trying to deploy a simple stateless session bean to SUN server. The client code keeps failing because PortableRemoteObject.narrow returns null, even though the reference is located in JNDI tree.
    I read somewhere that turning on RMI stub generation might help, but it didn't do it in my case.
    This is a local server (SUN App Server, as downloaded from java.sun site).
    JNDI tree contains the following entries:
    UserTransaction
    test.Dummy
    jdbc
    ejb
    test.Server
    Neither test.Dummy nor test.Server (the beans I deployed) want to load.
    Any help would be appreciated.
    Thanks!
    Mark

    Never mind. For some reason changing initial context creation from:
    Properties p=new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY,"whatever factory");
    p.put(Context.PROVIDER_URL,"whatever url");
    InitialContext context=new InitialContext(p);
    to:
    InitialContext context=new InitialContext();
    fixed the problem. Which is strange, since JNDI tree was listing both objects, and they both could be resolved when using the first code snippet. Only the actual object creation was failing.
    If anyone knows why this is so, please explain.
    Cheers,
    Mark

  • HomeInterface.class in PortableRemoteObject.narrow

    Hi
    I understand we do a JNDI look up to get the stub (HomeInterface object) and then narrow it down to ensure the object becomes RMI/IIOP compliant and it is of HomeInterface type, the following code snippet does what I have hence stated
    Context cx = new InitialContext();
    Object obj = cx.lookup("java:comp/env/beanString");
    HomeInterface hI = PortableRemoteObject.narrow(obj, HomeInterface.class) // NOW hI is the STUB object
    I am aware the Home interface will reside in the server side only, the object (obj) that is being returned is of type HomeInterface but then as we are not sure of its RMI/IIOP complaincy we narrow down the object to the Homeinterface type, as the code of HomeInterface resides in the server side how does this snippet (narrowing code) that resides in the client side identify and narrow down, the object returned, to the respective Home Interface type?
    The analogy to this I could think of is ordinary type casting while we pick a object from ArrayList, as all that reside in collection is of type Object we are to typecast to the respective Object type, but here the actual object resides in the JVM so I could understand how this casting happens, but what is the case with PortableRemoteObject.narrow as the Home Interface code resides in the remote server?
    Kindly reply

    Dont you know the concept of "client.jar" ??
    well, the following reside at server side:
    remote interface,
    home interface,
    bean implementation class.
    the following must reside at client side. These are packaged in a jar taht is typically called client.jar:
    remote interface
    home interface
    Check the classpath of your client. I am sure these two interfaces are there in it. Otherwise there will be some exception.
    Note that the system is sensitive to difference in the versions of home/remote. ie. if these are differet, serializationException may be thrown.
    Hope that helps.
    regards

  • [b]Periodic[/b] error using PortableRemoteObject.narrow

    I am trying to access a session bean on an oracle9ias(903) running on a windows 2000 server.
    Well I am actually accessing several beans, but on some of the beans the code works and on some it don't even though the code is alike. There is no execptions thrown but the LabelTypeDAOHome is null and I get a NPE when calling create on it.
    public static Context getInitialContext() throws NamingException, MissingResourceException
    Hashtable env = new Hashtable();
    String init = getResourceBundle().getString("INITIAL_CONTEXT_FACTORY");
    env.put(Context.INITIAL_CONTEXT_FACTORY,init);
    String principle = getResourceBundle().getString("SECURITY_PRINCIPAL");
    env.put(Context.SECURITY_PRINCIPAL,principle);
    String credential = getResourceBundle().getString("SECURITY_CREDENTIALS");
    env.put(Context.SECURITY_CREDENTIALS,credential);
    String url = getResourceBundle().getString("PROVIDER_URL");
    env.put(Context.PROVIDER_URL,url);
    env.put("dedicated.rmicontext","true"); // vigtig ifm web access!
    return new InitialContext(env);
    private LabelTypeDAO getLabeltypeDAO() throws NamingException, RemoteException {
    LabelTypeDAO labeltypeDAO = null;
    if (context == null) {
    context = getInitialContext();
    if (labeltypeDAOHome == null) {
    LabelTypeDAOHome labeltypeDAOHome = (LabelTypeDAOHome)PortableRemoteObject.narrow(context.lookup("LabelTypeDAO"), LabelTypeDAOHome.class);
    try {
    labeltypeDAO = labeltypeDAOHome.create();
    } catch(Exception ce) {
    throw new RemoteException("Could not create LabelTypeDAO.", ce);
    return labeltypeDAO;
    The funny part is that it doesn't happen on all the sessionbeans.
    Could it have something to do with what happens on deployment (e.g internal wrapping).
    There is no exception thrown untill I call labeltypeDAO = labeltypeDAOHome.create();
    This code is in a java class instantiated in a jsp page.

    Found it. It was my own stupid mistake. I had 2 references to the same variable name, one to an instance variable and one to a local variable and I ofcourse referenced the wrong one.
    Bad lars
    Bad lars
    Bad lars

  • How to solve PortableRemoteObject.narrow exception

    Hi ,
    I am getting portableRemoteObject exception... when i tried to narrow the stub with home class.
    Please find my code:
    Object objRef = ctx.lookup("java:comp/env/ejb/ejbSchedularBean"
    TaskHandlerHome home = (TaskHandlerHome) javax.rmi.PortableRemoteObject.narrow(objRef,TaskHandlerHome.class);
    Please help me to solve.
    cannot cast class com.ibm.websphere.schedular._TaskHandlerHome_Stub to interface com.ibm.websphere.scheduler.TaskHandlerHome
         at com.ibm.rmi.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:396)
         at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:156)
         at com.ibm.websphere.schedular.CallBeanTask.getBeanClassInstance(CallBeanTask.java:66)
         at com.sched.servlet.SchedulerServlet.init(SchedulerServlet.java:25)
         at javax.servlet.GenericServlet.init(GenericServlet.java:256)
         at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:185)
         at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.init(ServletWrapper.java:316)
         at com.ibm.ws.webcontainer.servlet.ServletWrapper.initialize(ServletWrapper.java:1119)
         at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.initialize(ServletWrapper.java:149)
         at com.ibm.wsspi.webcontainer.extension.WebExtensionProcessor.createServletWrapper(WebExtensionProcessor.java:99)
         at com.ibm.ws.webcontainer.webapp.WebApp.getServletWrapper(WebApp.java:742)
         at com.ibm.ws.webcontainer.webapp.WebApp.initializeTargetMappings(WebApp.java:422)
         at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinish(WebApp.java:275)
         at com.ibm.ws.wswebcontainer.webapp.WebApp.initialize(WebApp.java:272)
         at com.ibm.ws.wswebcontainer.webapp.WebGroup.addWebApplication(WebGroup.java:88)
         at com.ibm.ws.wswebcontainer.VirtualHost.addWebApplication(VirtualHost.java:157)
         at com.ibm.ws.wswebcontainer.WebContainer.addWebApp(WebContainer.java:655)
         at com.ibm.ws.wswebcontainer.WebContainer.addWebApplication(WebContainer.java:608)
         at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:333)
    Regards.
    sur

    I have created a simple applet.
    import java.lang.*;
    import java.awt.*;
    public class jawtex3 extends java.applet.Applet
    public void init()
    add(new Button("One"));
    add(new Button("Two"));
    public Dimension preferredSize()
    return new Dimension(200, 100);
    public static void main(String [] args)
    Frame f = new Frame(" jawtex3");
    jawtex3 ex = new jawtex3();
    ex.init();
    f.add("Center", ex);
    f.pack();
    f.show();
    In this no compilation errors.
    I am getting runtime exception.as Exception in thread "main"java.lang.NoClassDefFound Error: jawtex
    reply me soon.
    thankyou.

  • Java.lang.ClassCastException PortableRemoteObject.narrow(PortableRemoteObje

    Hi,
    I have a problem with a JNDI -lookup() using the CORBA namig system.
    After looking up: System.out.println( lookup("jndi-name") );
    I get an IOR: IOR:0000000000000053524d493a...............
    ok
    then I print out the name and the package of this object:
    Object o = lookup("jndi-name");
    System.out.println("name of o : " + o.getClass().getName());
    System.out.println("package of o : " + o.getClass().getPackage());
    and get:
    name of o : com.sun.corba.ee.impl.corba.CORBAObjectImpl
    package of o : package com.sun.corba.ee.impl.corba
    I expected the type of a Home-Interface, so that i could narrow the object o:
    PortableRemoteObject.narrow( o , classname);
    and the result is a:
    java.lang.ClassCastException
    at com.sun.corba.ee.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:293)
    at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:134)........
    What's wrong

    The most likely reason is that the stubs for that home interface are not being found. Double-check your classpath to make sure they are available to the code at runtime.
    -ken

  • ClassCastException while PortableRemoteObject.narrow

    Hello,
    I am getting the ClassCastException when I am narrowing the looked up home object.
    Here is the exception:
    java.lang.ClassCastException
         at com.sun.corba.se.internal.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:293)
         at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:134)
         at samples.ejb.client.HelloClient.main(HelloClient.java:50)
    Here is the code :
    try {
    System.out.println("Looking up greeter bean home interface");
    String JNDIName = "HelloGreet";
    System.out.println("Looking up: " + JNDIName);
    Object objref = initContext.lookup(JNDIName);
    System.out.println("Object from the look up -->"+objref);
    home = (HelloHome)javax.rmi.PortableRemoteObject.narrow(objref, HelloHome.class);
    any help appreciated. Thanks in advance
    With Regards,
    J. P. Naidu

    Hi Pullaiah,
    I've same problem with Sun ONE AS (notice that I encounter same problem on J2EE Reference Implementation too).I looked up for a solution everywhere but I did't find it and I'd be very happy if someone could post one.
    Thanks ,
    Fil

  • EjbHome = (EJBHome) PortableRemoteObject.narrow(homeObject, EJBHome.class);

    please explain the below given code , It is used in servicelocator (J2EE Pattern), basically to find the EjB Home
    ejbHome = (EJBHome) PortableRemoteObject.narrow(homeObject, EJBHome.class);

    If we plain old cast, we are assuming that the server is using the regular old RMI (which assumes that the server objects are always java objects.
    RMI/IIOP allows connecting RMI objects to non-Java objects regardless of the implementation language (for interface to any native legacy code). So, in such cases (where client and server are separated by a network), one should use the
    PortableRemoteObject.narrow(), which assumes that the objects that we are talking to are not always java objects.
    The plain old cast will work when we use local home and component interfaces as both client and server run on the same JVM.
    Rishi

Maybe you are looking for

  • SQ01:- Error in retriving the data from more than 1 additional fields

    hi Frnds, i have added three addidtional fields in the infotype through the transaction SQ02. when i am try to create a new new query using the transaction SQ01 then if i select all three new fields individually data is retrived properly but if i sel

  • User Exit for ME21 PO Creation at the time of saving--Urgent

    Hi, Can some one help me out in finding the user exit for PO creation at the time of saving. The Requirement is: I need to create a custom field in EKKO table. After appending the structure with the field to the EKKO table, i need to create a PO. Now

  • Please help me to implement my logic.

    Hi Experts, I am providing the complete code and my exact requirement. CREATE OR REPLACE PACKAGE INTERNAL_SCORING_RAM IS PROCEDURE TrendScoring_ram(pBUID       IN STAGING_ORDER_DATA.BUID%TYPE,                          OrderNum    IN STAGING_ORDER_DAT

  • Insert data into sql database where the values are in an array

    Hello Experts, using vbscript i want to store data in MS SQL. i have prepared a script which works fine when i provide the static value but in actual i get the values in an array and now want to store values from there. Below is not complete code but

  • Crystal Report for Enterprise not displaying Long Text from BEx

    Hello, I am creating a report using SAP Crystal Report for Enterprise 4.0 (Version 14.0.2) and the source of data is BEx query via OLAP connection created using IDT. I am using SAP BusinessObjects BI platform 4.0. The Characteristic (which is hierarc