2009-04-20 6 views
2

Im Moment spiele ich mit der Flex- und Java-Integration und versuche auf EJB3-Methoden zuzugreifen, indem ich auf die Flex-Schaltfläche klicke, aber es gibt mir einen Nullzeigerfehler. HierKann EJB nicht von FLEX (BlazeDS) anrufen

ist, was ich in meinem Code haben:

[Controller:]

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. Datei]

... 
<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> 

Das Programm funktioniert gut, wenn ich den Anruf zu EJB nehmen. Ich bin sicher, dass die Lösung einfach ist, aber ich kann es nicht herausfinden.

Übrigens verwende ich Glassfish als meine App. Server.

+1

Ich hatte das gleiche Problem. Da es nur etwas war, mit dem ich herumalberte, gab ich endlich auf. Ich bin mir sicher, dass es etwas Dummes ist, was ich tat ... einfach nicht sicher, was –

Antwort

2

Verwenden Sie die ejb3 factory?

+0

Ja ... das funktioniert, aber jetzt kann ich nur auf Fassaden zugreifen, keine Controller. Danke. – Maksim

0

Welcher Teil ist null? eve.result sollte dein zurückgegebenes Objekt sein. eve.message ist für Messaging-Dienste, glaube ich.

+0

eve.message.body.toString() die Nachricht aus meiner Funktion druckt, es wird "Hiiii" ausgedruckt, wenn ich nicht create (categories.get (i)) in meinem Programm. – Maksim

1

@EJB funktioniert nur (in einem standardmäßigen, generischen Java EE-Container) mit verwalteten Objekten, insbesondere Servlets und anderen Session Beans.

Out of the Box funktioniert @EJB nicht mit irgendeiner alten Klasse.

Flex müsste spezielle Unterstützung für die @ EJB-Notation dafür auch haben.

+0

Es wird in diesem Kontext tatsächlich funktionieren, da die Anforderung über das MessageBroker-Servlet erfolgt. Ich habe ein Projekt mit der ejb3 factory für Remoting, das genau das tut. –

Verwandte Themen