2009-04-20 11 views
2

今、私はFlexとJavaの統合でプレイしていますが、FlexのボタンをクリックしてEJB3メソッドにアクセスしようとしていますが、nullポインタエラーです。ここでFLEX(BlazeDS)からEJBを呼び出せません

は、私は私のコードで持っているものです。

[コントローラー:]

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

    ... 
} 

[リモート-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を使用しています。サーバ。

+1

私は同じ問題を抱えています。それはちょうど私が周りを乱していたものだったので、私はついに諦めました。私はそれが何かばかげていると確信しています...確かにわからない –

答えて

2

ejb3 factoryをお使いですか?

+0

えええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええられる者おかげさまで – Maksim

0

nullの部分は何ですか? eve.resultは返されたオブジェクトでなければなりません。 eve.messageは私が信じるメッセージングサービスのためのものです。

+0

eve.message.body.toString()は私の関数からメッセージを出力しています。作成していなければ "Hiiii" categories.get(i))を自分のプログラムに追加します。 – Maksim

1

@EJBは、サーブレットやその他のセッションBeanなどの管理対象オブジェクト(デフォルトの汎用Java EEコンテナ)でのみ動作します。

@EJBは、どのクラスでも動作しません。

Flexは@EJBの表記法を特別にサポートする必要があります。

+0

リクエストがMessageBroker Servletを経由しているため、実際にはこのコンテキストで動作します。私は、リモートでejb3ファクトリを使って、これを正確に実行しているプロジェクトを持っています。 –

関連する問題