Не могу позвонить в EJB из FLEX (BlazeDS) - PullRequest
2 голосов
/ 21 апреля 2009

Сейчас я играю с интеграцией Flex и Java и пытаюсь получить доступ к методам EJB3, нажав кнопку Flex, но это дает мне ошибку нулевого указателя.

Вот что у меня в коде:

[Контроллер:]

public class homePageController {

    @EJB
    CategoryFacadeRemote categoryFacade;

    public String populateDBWithXMLData(){
        ArrayList<Category> cats = new ArrayList<Category>();

        cats = new QuestionsUtil().getCategories();

        try{
            categoryFacade.createMany(cats);
        }
        catch(EJBException ex){
            ex.printStackTrace();
        }
        System.out.println("SIZE: " + cats.size());

        return "HIIIIII";
    }
}

[CategoryFacade]

@Stateless
public class CategoryFacade implements CategoryFacadeLocal, CategoryFacadeRemote {
    @PersistenceContext
    private EntityManager em;

    public void create(Category category) {
        em.persist(category);
    }

    public void createMany(ArrayList<Category> categories){
        for(int i = 0; i < categories.size(); i++){
            create(categories.get(i));
        }
    }

    ...
}

[Remote-config.xml]

...
<destination id="homePageController">
        <properties>
            <source>homePageController</source>
        </properties>
</destination>
...

[Flex App. Файл]

...
<mx:RemoteObject id="hcRO" destination="homePageController"></mx:RemoteObject>

<mx:Script>

...
        private function callHomePageController():void{

            hcRO.addEventListener(ResultEvent.RESULT, hcROResultHandler);
            hcRO.addEventListener(FaultEvent.FAULT, hcROFaultHandler);
            hcRO.populateDBWithXMLData();
        }

        private function hcROResultHandler(eve:ResultEvent):void{
            Alert.show("RESULT:" + eve.message.body.toString());
        }

        private function hcROFaultHandler(eve:FaultEvent):void{
            Alert.show("FAULT:" + eve.message.toString());
        }

]]>

</mx:Script>
    <mx:Button x="148" y="222" label="homePageController" click="callHomePageController()" width="262" height="43"/>
</mx:Application>

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

Кстати, я использую Glassfish в качестве своего приложения. сервер.

Ответы [ 3 ]

2 голосов
/ 21 апреля 2009

Вы используете ejb3 factory ?

1 голос
/ 21 апреля 2009

@ EJB работает (в стандартном стандартном контейнере Java EE по умолчанию) с управляемыми объектами, особенно с сервлетами и другими компонентами сеанса.

Из коробки @EJB не работает ни с одним старым классом.

Flex должен иметь специальную поддержку нотации @EJB для этой работы.

0 голосов
/ 21 апреля 2009

Какая часть равна нулю? eve.result должен быть вашим возвращенным объектом. Я считаю, что eve.message предназначен для служб обмена сообщениями.

...