Использование Blazeds для подключения к EJB на Glassfish - PullRequest
0 голосов
/ 30 марта 2011

Задача состоит в том, чтобы попытаться напрямую подключиться к EJB без состояния, развернутому на Glassfish.Я уже сделал это через веб-сервис, и я также могу подключиться к EJB, вызвав удаленный объект Java, который использует JNDI для поиска и загрузки bean-компонента.Что я не могу сделать, так это напрямую подключиться к EJB с Blazeds.Я использую EBJ3Factory BY Райана Норриса (скачано с сайта Adobe) следующим образом:

My WEB-INF / flex / services-config.xml has;

<factories>
    <factory id="ejb3" class="com.adobe.ac.ejb.EJB3Factory" />
</factories>

My WEB-INF / flex / remoting-config.xml имеет;

<destination id="MyEJB">
    <properties>
        <factory>ejb3</factory>
        <source>java:global/Together/PSearch!ejb.PSearch</source>  
    </properties>
</destination>

У меня есть простой Java-класс, который может получить доступ к bean-компоненту, поэтому я могу использовать Blazeds для вызова классакоторый затем вызывает бин;

public void getBean() {

    PSearch search;

    InitialContext ctx;
    try {
        ctx = new InitialContext();         

        search = (PSearch) ctx.lookup("java:global/Together/PSearch!ejb.PSearch");
        System.out.println("jndi okay");

    } catch (NamingException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
}

Команда asadmin для контекста в glassfish показывает мне;

./asadmin list-jndi-entries --context java:global/Together

PSearch__3_x_Internal_RemoteBusinessHome__: javax.naming.Reference
PSearch!ejb.PSearchRemote: javax.naming.Reference
PSearch!ejb.PSearch: com.sun.ejb.containers.JavaGlobalJndiNamingObjectProxy
PSearch!ejb.PSearchLocal: com.sun.ejb.containers.JavaGlobalJndiNamingObjectProxy

Тем не менее, когда я использую Eclipse / Flash Builder дляпопытаться импортировать службу BlazeDS. Я получаю сообщение об ошибке самоанализа;

java:global/Together/PSearch/!ejb.PSearch is not available in the specified location

Я также пытался изменить remoting-config.xml , чтобы он указывал на local и удаленные интерфейсы, но не радость!

Любые указатели будут с благодарностью.

1 Ответ

0 голосов
/ 26 апреля 2011

Один из обходных путей, который вы могли бы сделать, - это удалить фабричный XML-элемент, заменить имя JNDI источника на полное имя класса EJB и создать службу с помощью Flash Builder, используя службу BlazeDS RTS, как вы пытались это сделать.

<destination id="MyEJB">
    <properties>            
        <source>packagename.EJBClassName</source>  
    </properties>
</destination>

Когда вы закончите создание клиента службы, службы и объектов-значений (тип возврата и т. Д.) В своем проекте Flex, верните все обратно, как было:

<destination id="MyEJB">
    <properties>
        <factory>ejb3</factory>
        <source>java:global/Together/PSearch!ejb.PSearch</source>  
    </properties>
</destination>

Что вы на самом деле собираетесь делать, так это рассматривать EJB 3.x как обычный POJO для самоанализа, чтобы создать классы AS3, а когда вы закончите, измените назначение на назначение EJB3 с помощью фабрики.

Я работаю над тем, чтобы сделать эти шаги ненужными. Если у меня будет время закончить, я дам вам знать.

...