【问题标题】:Can't call EJB from FLEX (BlazeDS)无法从 FLEX (BlazeDS) 调用 EJB
【发布时间】:2010-10-20 16:50:02
【问题描述】:

现在我正在使用 Flex 和 Java 集成并尝试通过单击 Flex 按钮来访问 EJB3 方法,但它给了我空指针错误。

这是我的代码中的内容:

[控制器:]

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";
    }
}

[类别外观]

@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));
        }
    }

    ...
}

[远程配置.xml]

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

[Flex 应用程序。文件]

...
<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 作为我的应用程序。服务器。

【问题讨论】:

  • 我也遇到了同样的问题。由于这只是我在搞砸的东西,所以我最终放弃了。我确定这是我在做的愚蠢的事情......只是不确定是什么

标签: apache-flex ejb-3.0 integration ejb blazeds


【解决方案1】:

什么部分是空的? eve.result 应该是您返回的对象。 eve.message 是我相信的消息服务。

【讨论】:

  • eve.message.body.toString() 正在从我的函数中打印出消息,如果我的程序中没有 create(categories.get(i)),它将打印出“Hiiii” .
【解决方案2】:

你在使用ejb3 factory吗?

【讨论】:

  • 是的...这可行,但现在我只能访问 Facades,没有控制器。谢谢。
【解决方案3】:

@EJB 仅适用于托管对象(在默认的通用 Java EE 容器中),尤其是 Servlet 和其他会话 Bean。

开箱即用,@EJB 不适用于任何 ol' 类。

Flex 必须对 @EJB 表示法有特定的支持才能工作。

【讨论】:

  • 它实际上会在这种情况下工作,因为请求是通过 MessageBroker Servlet 来的。我有一个使用 ejb3 工厂进行远程处理的项目正是这样做的。
猜你喜欢
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多