2010-12-09 47 views
0

Voici donc le code que j'ai jusqu'à présent:Puis-je utiliser un objet distant dans flex pour interroger une classe java sur le serveur (Blazeds)? Je veux retourner l'information en direct dans mon DataGrid

code Flex

<?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()"/> 

Et c'est la java Fichier de classe. Cela renvoie et arraylist:

package flex; 

importer java.util.ArrayList; import java.util.List; import java.util.Random;

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

import supportingClasses.StockQuote;

@Service

@RemotingDestination

BlazeDsService public class {

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

}

A la minute un bouton doit être appuyé pour actualiser les données. Je veux me débarrasser de cela et interroger l'information toutes les x secondes. Cela peut-il être fait?

Dois-je changer de configuration? créer un modèle de publication - abonnement et utiliser des canaux de diffusion?

Merci

Répondre

1

Si vous voulez juste appeler la méthode getQuotes à chaque seconde X, vous pouvez utiliser une minuterie dans Flex, pas besoin de messagerie. Si vous souhaitez être averti lorsqu'une valeur de stock a changé, vous pouvez utiliser un client du côté Flex qui est abonné à la même destination où le serveur ajoute des messages. Vous pouvez trouver un exemple juste dans le dossier des exemples de BlazeDS, sous le dossier traderdesktop.

+0

Le problème que j'ai avec les échantillons clés en main est qu'il existe dans un fichier WAR. Une fois que vous extrayez ceci, tous les échantillons sont au format swf. Je suis déjà satisfait. Comment puis-je les exécuter dans Eclipse où je peux voir le code source du serveur et du client. Si je pouvais voir les deux côtés du code, je pense que cela répondrait à beaucoup de questions et serait d'une grande aide. Merci pour votre aide (encore une fois!) – Mick

+0

La méthode de minuterie fonctionne bien mais j'aimerais vraiment que ces échantillons fonctionnent. – Mick

+1

vous pouvez trouver le code source pour le côté flex et java sur les emplacements suivants: \ votre_blaze_archive \ tomcat \ webapps \ samples \ web-inf \ flex-src et \ votre_blaze_archive \ tomcat \ webapps \ samples \ web-inf \ src Pas sûr pourquoi avoir ce genre de structure de dossier de toute façon. –