EJB: почему я получаю эту ошибку при поиске JNDI?

#java #ejb #jndi #lookup

#java #ejb #jndi #поиск

Вопрос:

 InitialContext ctx = new InitialContext();
StatelessInterogareRemote beanStatelessRemote = (StatelessInterogareRemote) ctx
    .lookup("java:global/ShopEAP/ShopEJB/StatelessInterogare!shop.StatelessInterogareRemote");
StatefulShopCartLocal beanStateful = (StatefulShopCartLocal) ctx
    .lookup("java:global/ShopEAP/ShopEJB/StatefulShopCart!shop.StatefulShopCartLocal");
 

Когда я запускаю приложение, ошибка появляется после второго поиска:

 [[[ Error ]]]: Lookup failed for 'java:global/ShopEAP/ShopEJB/StatelessInterogare' in SerialContext 
INFO: [Ljava.lang.StackTraceElement;@89708c
WARNING: "IOP00100006: (BAD_PARAM) Class com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate is not Serializable"
org.omg.CORBA.BAD_PARAM:   vmcid: OMG  minor code: 6 completed: Maybe
    at com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:990)
    at com.sun.corba.ee.impl.logging.OMGSystemException.notSerializable(OMGSystemException.java:1005)
    at com.sun.corba.ee.impl.orbutil.ORBUtility.throwNotSerializableForCorba(ORBUtility.java:753)
...
 

Ответ №1:

Ну, похоже, что либо:

  1. Реализация класса StatelessInterogareRemote не является сериализуемой или
  2. Некоторый метод в интерфейсе StatelessInterogareRemote имеет (рекурсивно) параметр или возвращаемый тип, который не является сериализуемым

Просто для ясности: сериализуемый объект — это тот, который реализует Serializable интерфейс; и рекурсивно я имею в виду, что объект, его атрибуты, атрибуты его атрибутов и так далее — все они тоже должны быть сериализуемыми.

Поскольку вы указываете, что EJB не имеет состояния, должно быть ясно, что у него не должно быть атрибутов, но на всякий случай: все атрибуты в EJB также должны быть сериализуемыми или переходными, если они не могут быть сериализованы.

Комментарии:

1. Кажется, что проблема заключается в сериализации. Существует компонент с полным состоянием с 2 атрибутами: private transient HashMap<Целое число, целое число> кол-во; si private ArrayList<ProdusDTO> продукты; Класс реализует сериализуемый, но все еще не работает.

2. Проверьте, является ли ProdusDTO сериализуемым, и являются ли его атрибуты сериализуемыми, и так далее

3. @Oscar: Почему класс, реализующий StatelessInterogareRemote, также известный как компонент EJB, должен быть сериализуемым?

4. @Victor Объекты в EJB должны быть сериализуемыми, чтобы поддерживать репликацию сеанса на нескольких узлах в кластере, как часть стратегии высокой доступности

5. Да .. это касается аргументов метода и возвращаемых типов… но сам компонент hte не обязательно должен быть сериализуемым, я думаю