2010-12-09 10 views
0

Also hier zurückzukehren ist der Code Ich habe bisher:Kann ich ein Remote-Objekt in Flex verwenden, um eine Java-Klasse auf dem Server abzufragen (Blazeds)? Ich möchte Live-Informationen in meinem Datagrid

Flex-Code

<?xml version="1.0" encoding="utf-8"?> 

<fx:Declarations> 


    <s:RemoteObject id="getStockPrices" result="result(event)" destination="blazeDsService" 
        endpoint="http://localhost:8400/flexspring/messagebroker/streamingamf"/> 

</fx:Declarations> 


<mx:DataGrid x="10" y="295" width="910" height="211" creationComplete="getStockPrices.getQuotes();" 
      dataProvider="{getStockPrices.getQuotes.lastResult}" > 
    <mx:columns> 
     <mx:DataGridColumn headerText="Stock Ticker" dataField="name" /> 
     <mx:DataGridColumn headerText="Price" dataField="price"/> 
     <mx:DataGridColumn headerText="Hi" dataField="col3"/> 
     <mx:DataGridColumn headerText="Low" dataField="col4"/> 
     <!--<mx:DataGridColumn headerText="Adverage" dataField="col5"/> 
     <mx:DataGridColumn headerText="Graph" dataField="col6"/>--> 
    </mx:columns> 
</mx:DataGrid> 


<mx:Button label="Retrieve Stocks" click="retrieveStocks()"/> 

Und das ist die Java Klassendatei Dies gibt und Arraylist:

package flex; 

Import java.util.ArrayList; importieren java.util.List; importieren java.util.Random;

importieren org.springframework.flex.remoting.RemotingDestination; import org.springframework.flex.remoting.RemotingInclude; import org.springframework.stereotype.Service;

import supportingClasses.StockQuote;

@Service

@RemotingDestination

public class BlazeDsService {

private static final String[] MASTER_LIST = {"C", "FNM", "FRE", "F", "GOOG", "AIG", "CSCO", "MSFT", "AAPL", "YHOO", "BSX", "PORT","F", "TNT", "ESP", "RET", "VBN", "EES"}; 


@RemotingInclude 
public List<StockQuote> getQuotes(){ 
    List<StockQuote> list = new ArrayList<StockQuote>(); 
    Random r = new Random(); 
    for (String s:MASTER_LIST){ 
     StockQuote sq = new StockQuote(); 
     sq.setName(s); 
     sq.setPrice(r.nextInt(50)); 
     list.add(sq); 
    } 
    return list; 
} 

}

in der Minute eine Taste, um die Daten gedrückt werden muss, aktualisieren. Ich will das loswerden und die Informationen alle x Sekunden abfragen. Kann das gemacht werden?

Muss ich mein Setup ändern? Erstellen Sie ein Publish - Subscribe - Muster und verwenden Sie Streaming - Kanäle?

Dank

Antwort

1

Wenn Sie die getQuotes Methode auf alle X Sekunden einfach anrufen wollen Sie einen Timer in Flex nutzen können, ohne die Notwendigkeit für Messaging. Wenn Sie benachrichtigt werden möchten, wenn sich ein Bestandswert geändert hat, können Sie einen Verbraucher auf der Flex-Seite verwenden, der das gleiche Ziel abonniert hat, an dem der Server Nachrichten hinzufügt. Sie finden ein Beispiel dafür im BlazeDS-Beispielordner unter dem Ordner händlerdesktop.

+0

Das Problem, das ich mit den Turnkey-Beispielen habe, ist, dass es in einer WAR-Datei gibt. Sobald Sie dies extrahieren, sind alle Proben im SWF-Format. d. h. bereits erfüllt. Wie kann ich diese in Eclipse ausführen, wo ich den Quellcode von Server und Client sehen kann. Wenn ich beide Seiten des Codes sehen könnte, dann würde das meiner Meinung nach viele Fragen beantworten und eine große Hilfe sein. Danke für Ihre Hilfe (wieder!) – Mick

+0

Timer-Methode funktioniert gut, aber ich würde immer noch gerne diese Proben arbeiten. – Mick

+1

Sie können den Quellcode für die Flex- und Java-Seite an den folgenden Speicherorten finden: \ your_blaze_archive \ tomcat \ webapps \ samples \ web-inf \ flex-src und \ your_blaze_archive \ tomcat \ webapps \ samples \ web-inf \ src .Nicht sicher, warum diese Art von Ordnerstruktur sowieso hat. –