Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > PortableRemoteObject


Автор: ZAVS 24.3.2005, 17:12
Код

ConverterHome home =(ConverterHome) PortableRemoteObject.narrow(objref,ConverterHome.class);


подскажите что делает метод narrow
и почему не используем ппосто cast smile

Автор: Domestic Cat 24.3.2005, 18:37
этo фишка RMI-IIOP. Он прдоставляет возможости CORBA, значит может "говорить" не только с Java приложениями. IIOP протокол нe был разработан для Java, это часть стандарта CORBA. Потому переданный объект нельзя просто кастить в Java объект, а нужно сначалa проверить, является ли он нужным нam объектом. PortableRemoteObject.narrow это и делает.

Автор: ZAVS 25.3.2005, 02:04
спасибо!!!!

а если заранее знаем что передаются обьекты java без PortableRemoteObject программа будет правильно работать???

Автор: Domestic Cat 25.3.2005, 02:28
Нет, если пользуешь RMI-IIOP. Это в обычном RMI можно.

Автор: ZAVS 25.3.2005, 02:57
a какой механизм используется когда при помощи JNDI y ejb сервера получаем обьекты (home или remote )??
без PortableRemoteObject можем обойтись???

Автор: Domestic Cat 25.3.2005, 03:11
Цитата(ZAVS @ 24.3.2005, 17:57)
a какой механизм используется когда при помощи JNDI y ejb сервера получаем обьекты (home или remote )??
без PortableRemoteObject можем обойтись???


Нельзя если бин не локальный. Если локальный - можно просто lookupом.

Автор: ZAVS 25.3.2005, 03:29
насколько я понял обьекты передаются "не java smile" виде и прежде чем их использовать нужно их
перевести в "java" вид, а потом кастить

а что будет если получим не "java" обьект ????

Автор: Domestic Cat 25.3.2005, 03:38
Цитата(ZAVS @ 24.3.2005, 18:29)
насколько я понял обьекты передаются "не java smile" виде и прежде чем их использовать нужно их
перевести в "java" вид, а потом кастить


Объекты -то java, просто му проверяем что можно сделать такой кастинг.


Цитата(ZAVS @ 24.3.2005, 18:29)
а что будет если получим не "java" обьект ????

ClassCastException smile

Автор: ZAVS 25.3.2005, 03:57
Цитата(Domestic @ 25.3.2005, 03:38)
Объекты -то java, просто му проверяем что можно сделать такой кастинг.


может я что-то не понялsmile

почему сразу не кастить а потом, если будет не тот обьект поймать ClassCastException smile
и почему прежде чем кастить не можем использовать instance of
smile smile smile

Автор: Domestic Cat 25.3.2005, 05:10
В общем, легче посмотреть на сорс этого метода
Код

public java.lang.Object narrow ( java.lang.Object narrowFrom, 
    java.lang.Class narrowTo) throws ClassCastException 
    {
        java.lang.Object result = null;

        if (narrowFrom == null)
            return null;

        if (narrowTo == null) 
            throw new NullPointerException("invalid argument");

        try { 
            if (narrowTo.isAssignableFrom(narrowFrom.getClass())) 
                return narrowFrom;

        // Is narrowTo an interface that might be
        // implemented by a servant running on iiop?
        if (narrowTo.isInterface() && 
        narrowTo != java.io.Serializable.class &&
        narrowTo != java.io.Externalizable.class) {
    
        org.omg.CORBA.Object narrowObj 
            = (org.omg.CORBA.Object) narrowFrom;                
        
        // Create an id from the narrowTo type...
        String id = RepositoryId.createForAnyType(narrowTo);
        
        if (narrowObj._is_a(id)) {
            return Utility.loadStub(narrowObj,narrowTo);
        } else {
            throw new ClassCastException( "Object is not of remote type " +
            narrowTo.getName() ) ;
        }
        } else {
        throw new ClassCastException( "Class " + narrowTo.getName() + 
            " is not a valid remote interface" ) ;
        }
        } catch(Exception error) {
        ClassCastException cce = new ClassCastException() ;
        cce.initCause( error ) ;
        throw cce ;
        }
    }


Он проверяет, является ли первый аргумент инстансом класса или сабкласса второго аргумента:
Код
            
if (narrowTo.isAssignableFrom(narrowFrom.getClass())) 
                return narrowFrom;

Если нет, то смотрит, если это CORBA объект, то пытается вернуть стаб к нему, если нет, то бросает иксепшн.

Автор: ZAVS 26.3.2005, 00:13
большое спасибо!!!

еще один вопрос:

насколько я понял в ejb нам нужна только первая часть этого метода??


Автор: Domestic Cat 26.3.2005, 00:59
Цитата(ZAVS @ 25.3.2005, 15:13)
еще один вопрос:

насколько я понял в ejb нам нужна только первая часть этого метода??


В каком смысле первая часть? ejb использует RMI-IIOP, а потому нужен весь метод.

Автор: ZAVS 26.3.2005, 01:03
я думал что ejb не использует corba обьекты smile

Автор: Domestic Cat 26.3.2005, 01:05
smile
http://java.sun.com/developer/technicalArticles/ebeans/corba/

Автор: ZAVS 26.3.2005, 01:13
большое спасибо( за терпение smile)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)