Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WebSphere & serialization problem, Проблема с сериализацием при ремоутинге 
:(
    Опции темы
MisterCleric
Дата 4.3.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет всем.
Опишу ситуацию.
Есть два EAR: бизнес-слой и его клиент.
Клиент обращается к бизнесу через SessionFacade Remote interface соответсвенно 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
ecologist
Дата 4.3.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 5
Всего: 9



Ну тут же все достаточно очевидно - проблема в строке 18. Думаю, что именно там smile

Хотелось бы знать подробности все-таки.
PM MAIL   Вверх
MisterCleric
Дата 4.3.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Не понял как так получилось с темой?...
продолжу тогда.
Клиент обращается к бизнесу через JNDI lookup SessionFacade Remote interface.
бизнес работает с базой через JPA на Hibernate.
Все отлично работает на JBOSS, но заказчик требует ставить проект на WebSphere.

Много было тут проблем с несовместимостью... Но самое, что меня убило это когда я вызвал метод с бизнеса, то возник довольно смешной exception типа
Цитата

 Caused by: org.omg.CORBA.MARSHAL: java.util.List is not Serializable and not Externalizable  vmcid: IBM  minor code: 8F2  completed: No
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectInternal(IIOPInputStream.java:429)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectLoop(IIOPInputStream.java:512)
    at com.ibm.rmi.io.IIOPInputStream.readObjectDelegate(IIOPInputStream.java:382)
    at com.ibm.rmi.io.IIOPInputStream.readObjectOverride(IIOPInputStream.java:638)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:356)
    at java.util.ArrayList.readObject(ArrayList.java:717)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:45)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at com.ibm.rmi.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1700)
    at com.ibm.rmi.io.IIOPInputStream.inputObjectUsingClassDesc(IIOPInputStream.java:1435)
    at com.ibm.rmi.io.IIOPInputStream.inputObjectClassDesc(IIOPInputStream.java:1410)
    at com.ibm.rmi.io.IIOPInputStream.readSerializable(IIOPInputStream.java:1139)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectInternal(IIOPInputStream.java:427)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectLoop(IIOPInputStream.java:512)
    at com.ibm.rmi.io.IIOPInputStream.readObjectDelegate(IIOPInputStream.java:382)
    at com.ibm.rmi.io.IIOPInputStream.readObjectOverride(IIOPInputStream.java:638)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:356)
    at java.util.Hashtable.readObject(Hashtable.java:1005)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:45)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at com.ibm.rmi.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1700)
    at com.ibm.rmi.io.IIOPInputStream.inputObjectUsingClassDesc(IIOPInputStream.java:1435)
    at com.ibm.rmi.io.IIOPInputStream.inputObjectClassDesc(IIOPInputStream.java:1410)
    at com.ibm.rmi.io.IIOPInputStream.readSerializable(IIOPInputStream.java:1139)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectInternal(IIOPInputStream.java:427)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectLoop(IIOPInputStream.java:512)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:464)
    at com.ibm.rmi.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:210)
    at com.ibm.rmi.iiop.CDRReader.read_value(CDRReader.java:1556)
    ... 131 more



Ну ладно, взяли переписали все возвраты методов бизнеса на ArrayList
Но есть такое:
Код

@Entity
@Table(name = "ROLES")
@org.hibernate.annotations.AccessType("field")
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@SequenceGenerator(name = "SEQUENCE", sequenceName = "GEN_ROLES", allocationSize = 1)

public class Role implements Serializable {
    @Id
    @GeneratedValue(generator = "SEQUENCE")
    @Column(updatable = false, nullable = false, unique = true)
    private Long id;

    private String code;

    private String lastUpdateLogin;


    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "ROLERIGHTS",
            joinColumns = {@JoinColumn(name = "ROLEID")},
            inverseJoinColumns = {@JoinColumn(name = "RIGHTID")}
    )
    @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
    @OptimisticLock(excluded = true)
    @Fetch(FetchMode.SELECT)
    private List<Right> rights = new ArrayList<Right>(); // сюда обратить внимание
}


соответсвенно здесь тоже Сфера ругнулась, что java.util.List is not Serializable and not Externalizable

Эт че получается, что перед тем, как сериализовать идет проверка на то что является ли тип поля (а не его значение) Serializable?

попытка обмана Hibernate такая: (пока не пробовал такое деплоить...)

Код

@Entity
@Table(name = "ROLES")
//@org.hibernate.annotations.AccessType("field")
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@SequenceGenerator(name = "SEQUENCE", sequenceName = "GEN_ROLES", allocationSize = 1)

public class Role implements Serializable {

    private Long id;

    private String code;

    private String lastUpdateLogin;

    private ArrayList<Right> rights = new ArrayList<Right>(); // здесь!!!

    @Id
    @GeneratedValue(generator = "SEQUENCE")
    @Column(updatable = false, nullable = false, unique = true)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getLastUpdateLogin() {
        return lastUpdateLogin;
    }

    public void setLastUpdateLogin(String lastUpdateLogin) {
        this.lastUpdateLogin = lastUpdateLogin;
    }

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "ROLERIGHTS",
            joinColumns = {@JoinColumn(name = "ROLEID")},
            inverseJoinColumns = {@JoinColumn(name = "RIGHTID")}
    )
    @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
    @OptimisticLock(excluded = true)
    @Fetch(FetchMode.SELECT)
    public List<Right> getRights() {
        return rights;
    }

    public void setRights(List<Right> rights) {
        this.rights = new ArrayList<Right>(rights); // и здесь!!!
    }
}


но все-равно вопрос остается открытым. Что за проблема с ремоутингом на WebSphere при сериализации? И зачем это я должен под нее так вот извращенски подстраиваться(ну эт риторически)? Ну вот не хочется полторы сотни сущностей переписывать показанным выше образом
А может где-то надо какую-то галочку поставить или снять в консоле настройки сервака, что бы не было такой проверки на тип?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
MisterCleric
Дата 4.3.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Спешу сообщить, что обманка для persistence прокатила.
Но это ж изврат так писать!..


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
lowolf
Дата 1.3.2011, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Думаю стоит преподнять тему, никто не нашел адекватного решения? Потому как наткнулся на такую же проблему. Разрабатываю веб сервис который потом обращается к бизнесу через JNDI lookup SessionFacade Remote interface, бизнес так же работает с базой через JPA на Hibernate. Но после отправки запроса, возращается:
Код

Caused by: java.rmi.MarshalException: CORBA MARSHAL 0x4942f896 No; nested exception is: 
    org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : java.util.List is not Serializable and not Externalizable  vmcid: IBM  minor code: 896  completed: No
    at com.ibm.CORBA.iiop.UtilDelegateImpl.mapSystemException(UtilDelegateImpl.java:271)
    at javax.rmi.CORBA.Util.mapSystemException(Util.java:84)
    at com.ibm.rmi.util.ProxyUtil.copyObject(ProxyUtil.java:482)
    at com.ibm.rmi.util.ProxyUtil.invokeWithClassLoaders(ProxyUtil.java:754)
    at com.ibm.CORBA.iiop.ClientDelegate.invoke(ClientDelegate.java:1161)
    ... 39 more
Caused by: org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : java.util.List is not Serializable and not Externalizable  vmcid: IBM  minor code: 896  completed: No
    at com.ibm.rmi.iiop.CDRInputStream.read_value(CDRInputStream.java:1658)
    at com.ibm.rmi.util.ProxyUtil.copyObject(ProxyUtil.java:450)
    ... 41 more
Caused by: org.omg.CORBA.MARSHAL: java.util.List is not Serializable and not Externalizable  vmcid: IBM  minor code: 8F2  completed: No
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectInternal(IIOPInputStream.java:419)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectLoop(IIOPInputStream.java:500)
    at com.ibm.rmi.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:454)
    at com.ibm.rmi.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:209)
    at com.ibm.rmi.iiop.CDRInputStream.read_value(CDRInputStream.java:1640)
    ... 42 more


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1006 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.