Résumé exécutif: Quels types de choix d'architecture sonore sont disponibles pour l'affichage de données dynamiques thread-safe en temps réel à l'aide de Swing?Architecture pour l'affichage de données dynamiques en temps réel
Détails: J'ai récemment terminé l'écriture d'une plate-forme de trading automatisée multithread en Java. Je dis "plate-forme" parce que j'ai rendu très facile la mise en œuvre de nouveaux et multiples programmes de trading en subdivisant les objets virtuels. J'ai encapsulé le code de trading afin que je puisse l'utiliser dans une application Swing, une application console, ou autre. Actuellement, je l'utilise avec un frontal Swing.
Je dirais que je suis un abuseur Swing plutôt que l'utilisateur. Pas exprès. Il faut un type particulier de réflexion pour développer une interface graphique moderne et l'intégrer à des données dynamiques que je n'ai pas encore apprises. Je connais les bases mêmes, telles que la mise à jour de l'écran uniquement dans le fil d'expédition de l'événement. Voici comment j'afficher les messages (de ma SingleFrameApplication
sous-classe):
private class PrintTraderMsgTask extends SwingWorker<Void, String>{
@Override
protected Void doInBackground() {
String msg;
while(!isCancelled()){
msg = m_data.m_TraderMsgs.poll();
if(msg!=null){
publish(msg);
}
}
return null;
}
@Override
protected void process(List<String> chunks) {
for (String item: chunks){
m_view.displayTraderString(item);
}
}
}
L'élément de données est ici juste
public ArrayBlockingQueue<String> m_TraderMsgs;
qui un certain nombre de « Traders » (threads séparés) peuvent adhérer messages à à tout moment. L'autre type d'objet de données que j'ai utilisé est un ConcurrentHashMap
. Je collectionne les carnets de commandes, les registres de transactions, les prix et d'autres types de données. Donc, l'image que j'essaie de peindre ici est une grande collection de données dépendant du temps, trop pour tout afficher à la fois.
Ce que je voudrais vraiment faire, c'est afficher des informations de synthèse et avoir la possibilité de faire un zoom avant. En ce moment je montre des messages dans JTextAreas
et d'autres informations dans certains JTextFields
. Je peux lire sur JCoolWhatever et les données de données là-bas. Mais avant de commencer cette route, je veux apprendre d'autres choix d'architecture.
Méthode 1: Utilisez SwingWorkers pour saisir des données et le coller dans JWhatever
qui réside dans ma FrameView
sous-classe.
Méthode 2: ???
...
Nous voulons:
(1) modularité raisonnable .. assez pour ajouter/supprimer des éléments sans ruiner notre soirée
(2) la capacité d'interaction, la capacité drill-down spécifique car il y a tellement de données
Merci ... l'affichage en temps réel d'un ensemble complexe de données dynamiques est un sujet intéressant et j'espère que nous pourrons avoir une bonne discussion.
Que voulez-vous dire par « l'information sommaire » et « drill down »? Le résumé est-il simplement le nombre de différents types de messages? Ou vos messages ont-ils plus de structure et vous avez besoin de les résumer (par exemple le nombre de partages dans les commandes)? –
Les informations récapitulatives peuvent être une liste des programmes de trading, leur position actuelle et le profit/perte actuel (PnL). "Drill down" pourrait être un clic sur le programme de trading déclenchant l'affichage de tous ses métiers dans un autre volet. Ceci est juste un exemple. – Pete