Как ссылаться на EJB из другого EJB в Oracle Workshop для WebLogic? - PullRequest
0 голосов
/ 28 марта 2012

Мне нужна помощь с практическими рекомендациями в среде разработки Weblogic (Oracle Workshop for WebLogic 10.3).

У меня есть сессионный компонент в одном .jar, и мне нужно использовать его из объекта, управляемого сообщениями, в другом .jar. Я хочу использовать нотацию "java: comp / env / ..." при поиске сессионного компонента.

jndiCtx = new InitialContext();
workerHome = (WorkerSBLocalHome) jndiCtx.lookup("java:comp/env/ejb/WorkerSBLocalHome");
WorkerSBLocal worker = workerHome.create();

Таким образом, мне нужно создать ссылку на ejb в дескрипторе развертывания компонента MDB (ejb-jar.xml):

<ejb-local-ref>
    <ejb-ref-name>ejb/WorkerSBLocalHome</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local-home>test.WorkerSBLocalHome</local-home>
    <local>test.WorkerSBLocal</local>
    <ejb-link>WorkerEJB.jar#WorkerSB</ejb-link>
</ejb-local-ref>

Это работает (проверено). Проблема заключается в том, что дескриптор развертывания MDB генерируется, и каждый раз, когда я редактирую источник MDB, Oracle Workshop повторно генерирует дескриптор развертывания, используя аннотации классов, и перезаписывает мои добавления.

Итак, мой вопрос: как лучше всего ссылаться на EJB из MDB при работе с Oracle Workshop для WL? Или есть ли другой предпочтительный способ создания ссылок на bean-компоненты при использовании аннотаций ejb, чем тот, который я описал выше? Или я должен разместить ссылку на свой бин где-нибудь еще?

1 Ответ

0 голосов
/ 29 марта 2012

Кажется, что нет способа отредактировать сгенерированный дескриптор развертывания вручную (если вы не хотите потерять свои изменения). Но вы все равно можете указать его содержимое с помощью аннотаций.

@EjbLocalRef(name="ejb/WorkerSBLocalHome", type=Constants.RefType.SESSION, 
    home="test.WorkerSBLocalHome", local="test.WorkerSBLocal",
    link="WorkerEJB.jar#WorkerSB")
@MessageDriven(ejbName = "HelloWorldMDB", 
    destinationJndiName="jms.RequestQueue", destinationType = "javax.jms.Queue")
public class Test extends GenericMessageDrivenBean implements
    MessageDrivenBean, MessageListener {
    .....
    jndiCtx = new InitialContext();
    workerHome = (WorkerSBLocalHome) jndiCtx.lookup("java:comp/env/ejb/WorkerSBLocalHome");
    WorkerSBLocal worker = workerHome.create();
    .....
}

Этот подход все еще заставляет вас указывать конкретные имена jndi в коде, но вы всегда можете изменить сгенерированное содержимое дескриптора развертывания во время развертывания.

...