Использование Blazeds для подключения к EJB на Glassfish

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

В моем WEB-INF / flex / services-config.xml есть;

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

В моем 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 для вызова класса, который затем вызывает bean-компонент;

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 так, чтобы он указывал на локальный и удаленный интерфейсы, но без радости!

Приветствуются любые указатели.


person Des Cullen    schedule 30.03.2011    source источник


Ответы (1)


Один из обходных путей, который вы могли бы сделать, - это удалить фабричный 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, используя фабрику.

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

person Timmo    schedule 26.04.2011