EJB2 xdoclet @ejb.ejb-ref в сеансовом компоненте, указывающем на самого себя

Сейчас я работаю над миграцией с EJB 2.0 на 3.0. Старые сеансовые компоненты использовали xdoclets для настройки некоторых вещей.

Я могу понять почти все из них, но есть одна вещь, которая меня беспокоит. Почему кто-то использует @ejb.ejb-ref так, как в коде ниже.

/**
 * @ejb:bean name="SomeBean"
 *      local-jndi-name="com/my/jndi/SomeBean"
 *      view-type="local" type="Stateless"
 * 
 * @ejb.ejb-ref ejb-name="SomeBean"
 *      view-type="local"
 *
 * ..some more stuff here
 */
public class SomeBean implements SessionBean {
    // class body here
}

В этом xdoclet есть еще несколько @tags, включая некоторые для настройки weblogic (@weblogic).

Есть ли какая-то причина, по которой мы можем захотеть добавить ссылку на сам компонент? Второй вопрос, нужен ли еще этот конфиг в ejb3?

У меня такое чувство, что я где-то читал, что эти @weblogic теги могут иногда нуждаться в такой ссылке, но я просто не могу найти ее еще раз. Это правда?


@РЕДАКТИРОВАТЬ

После разговора с одним из авторов таких классов я узнал, что такая самоссылка может использоваться, когда один из методов bean-компонента вызывает второй метод (для которого может потребоваться новая транзакция), используя ссылку на экземпляр класса, которым он владеет.

После обновления его можно заменить чем-то вроде этого ниже.

@Stateless
public class SomeBean implements IBeanLocal {

    @EJB
    IBeanLocal someBean;

    // class body here
}

Мое замешательство было в основном вызвано некоторым ненужным использованием такого рода самореференции. Как указал Steve C, вероятно, кто-то не знал, как использовать эту функцию xdoclet.


person Dcortez    schedule 11.08.2014    source источник


Ответы (1)


Прежде всего, "локальные" типы представления подразумевают, что вы просматриваете код EJB 2.1 (а не 2.0).

Я согласен, что тег @ejb.ejb-ref любопытен. Это было бы полезно только в том случае, если бы он где-то использовал JNDI для поиска другого экземпляра сеансового компонента того же типа. И даже тогда это избыточно, потому что домашние объекты ejb доступны в объекте EJBContext компонента.

Вполне возможно, что первоначальные авторы не знали, для чего нужен ejb-ref. Такого в то время было много.

Если бы существовал ejb-ref для другого типа bean-компонента, вы обычно видели бы соответствующий @weblogic.ejb-local-reference-description или @weblogic.ejb-reference-description, который используется для создания информации об отображении JNDI в файле weblogic.xml, связанном по имени ejb.

В любом случае вы должны заменить любую из этих ссылок поиска переменными экземпляра, помеченными @EJB.

Полная документация xdoclet (и исходный код) по-прежнему доступна по адресу (http://xdoclet.sourceforge.net/xdoclet/index.html), FWIW.

person Steve C    schedule 11.08.2014
comment
В конце концов, может быть, мне удастся найти автора этого класса и спросить его, что он имел в виду. В любом случае спасибо за помощь. - person Dcortez; 11.08.2014