Concept d'application réactive dans une application de gestion en Java et classe ORM de gestion de données
Bonjour,
Peut-être connaissez-vous le podcast nipdev de la communauté niptech. Je l'ai découvert sur ituns.
Dans ce cadre là, j'ai entendu parlé d'application réactive.
Voici le lien pour ceux que ça intéresse.
Épisode consacré aux applications réactives.
http://nipcast.com/nipdev-13-les-app...ons-reactives/
podcast nipdev
http://nipcast.com/category/nipdev/
Ce concept m'a l'aire assez séduisant et semble aller plus loin que le multi threding ou la gestion d'événement.
Formé en java, je pensait appliquer une partie de ces concept dans ma prochaine application de gestion de facturation de rendez-vous ou encore dans mon une prochaine version de mon application de gestion d'un commerce d'abricot.
Questions
Le fait d'utiliser des api de type réactive application, est-ce une manière d'optimiser le programme ?
A propos, d'optimisation, on m'a conseiller de profiler mon programme mais comment faire ça le plus simplement dans la dernière version d'eclipse ?
Je prévoyait aussi utiliser un système de classe ORM pour gérer la base de donnée. Une classe par table.
Mais en fait quelles sont les avantages et inconvénients de tout ça ?
Merci de me répondre.
S'ils fréquentent ce forum, je salue bien Fabrice oiseau ainsi que toute la communauté nipdev.et je les remercie pour ce sujet très intéressants.Je l'invite aussi à me répondre.
Salutations à tous,
Java et les applications réactives.
Bonjour,
Voici un résumé de ce que j'ai trouvé au sujet des applications réactivent
http://nipcast.com/nipdev-13-les-app...ons-reactives/
Spécialisent java, je ne suis pas formé en scala. Il semble toutefois qu'il s'agit d'un mélange entre python et java un peu comme jython.
Puis-je faire des applications réactive avec akka en utilisant java ou faut-il utiliser Rex
http://github.com/Netflix/RxJava
Est-ce que quelqu'un a déjà utiliser cet api.
Est-ce simple ?
où trouver des exemples ?
Merci de me répondre
Salutations
Exemple d'un serveur de débogage
Bonjour,
Vous parlez de Serveur ça tombe bien puisque j'en ai un pour pouvoir charger de réceptionner les message qu'il soit d'erreur et autre d'un programme.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
package debugserver;
import java.awt.*;
import javax.swing.*;
import abricotshopmanager.AbricoshopManager;
import java.net.*;
import java.io.*;
import java.text.DateFormat;
import java.util.*;
public class Server {
final static int PORT = 4321;
static Socket service;
public Server () {
init();
}
private void init() {
Dimension dimScrean = Toolkit.getDefaultToolkit().getScreenSize();
JFrame server = new JFrame("server");
server.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
server.setSize(150,0);
// Mettre la fenêtre en bas à droite
server.setLocation(dimScrean.width - server.getWidth(),dimScrean.height - server.getHeight());
server.setVisible(true);
// préparation du serveur
// réseau
try {
ServerSocket ecoute = new ServerSocket(PORT);
while (true) {
service = ecoute.accept();
Thread serviceThread = new Thread (new ServiceThread() );
serviceThread.start();
serviceThread.setName("connect thread");
}
}
catch (BindException be) {
System.err.println("Le serveur a quitter car un autre et déjà en utilisation");
System.exit(-1);
}
catch (IOException ioe) {
System.err.println(("Problème au niveau du serveur : "+ ioe.getMessage()) + "il est : "+formateDate() );
ioe.printStackTrace();
}
}
/**
* Cette méthode créer et formate la date du jour
@return String
*/
static String formateDate() {
TimeZone tz = TimeZone.getTimeZone("Europe/Paris");
Calendar calendar = Calendar.getInstance(tz);
Date date = new Date();
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Paris"));
calendar.setTime(date);
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRENCH);
return ("Report_"+df.format(date)+" "+calendar.get(Calendar.HOUR_OF_DAY)+'_'+calendar.get(Calendar.MINUTE)+'_'+ calendar.get(Calendar.SECOND)+".log").replace('/', '_');
}
public static void main (String [] args) {
new Server();
}
}
class ServiceThread implements Runnable {
public void run() {
// TODO Auto-generated method stub
BufferedReader rd;
String message;
try {
rd = new BufferedReader(new InputStreamReader(Server. service.
getInputStream()));
System.out.println("Nouvelle connection à : "+Server.formateDate());
while ( (message = rd.readLine()) != null) {
writeInfile(message);
}
}
catch (IOException ioe) {
System.out.println("Le client a quitté : "+Server. formateDate());
if (! ioe.getMessage().contains("reset")) {
System.err.println("L'erreur suivante s'est produite à :"+Server.formateDate()+" \n le message est :"+ ioe.getMessage());
ioe.printStackTrace();
}
}
}
private synchronized void writeInfile (String message) {
String messgage = null;
File fileErrorOutput = new File (Server.formateDate());
FileOutputStream fileError = null;
PrintStream fosErrorSender = null;
try {
fileError = new FileOutputStream(fileErrorOutput,true);
fosErrorSender = new PrintStream(fileErrorOutput);
System.out.println(new String("Nouveau message +" +
fileErrorOutput.getName()));
fosErrorSender.println(message);
System.out.println(message);
fosErrorSender.flush();
}
catch (IOException ioe) {
System.err.println("Imposible d'écrire dans le fichier de log "+fileErrorOutput.getName() + "il est : "+formateDate() + "Message : "+ioe.getMessage());
ioe.printStackTrace();
}
finally {
try {
fosErrorSender.close();
fileError.close();
if (fileErrorOutput.length() == 0) { // aucune erreur n'est survenue
fileErrorOutput.delete();
System.out.println("Le fichier a été supprimé");
}
}
catch (FileNotFoundException fne) {
System.err.println("Le fichier : " + fileErrorOutput.getName() +" N'a pas été trouvé dans le répertoire du serveur. Il est :" + Server.formateDate()+ "Message : "+fne.getMessage() );
}
catch (IOException ioe) {
System.err.println("Un problème est survenu lors de l'écriture dans le ficher : "+fileErrorOutput.getName());
ioe.getStackTrace();
}
}
}
public static String formateDate() {
TimeZone tz = TimeZone.getTimeZone("Europe/Paris");
Calendar calendar = Calendar.getInstance(tz);
java.util.Date date = new java.util.Date();
TimeZone.setDefault(tz);
calendar.setTime(date);
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRENCH);
if (AbricoshopManager.isDebug()) {
System.out.println("Retourner une date formatée.");
}
return (df.format(date)+" "+calendar.get(Calendar.HOUR_OF_DAY)+'_'+calendar.get(Calendar.MINUTE)+'_'+ calendar.get(Calendar.SECOND));
}
} |
Qu'est-ce que ce code vous inspire ?
Comment peut-on modifier ce code pour le rendre ce code réacrtif.
A mon avis, le principal problème ce situe au niveau des while (true)
J'aurais voulus mettree des événement à la réception de lla requête du programme client.sachant que ce programme utilise le protocole tcp avec des streem et non des datagramepacket.
Les deux code que j'aimerais mettre en événement ou réactif et que j'estime bloquant.
Code:
1 2 3 4 5 6 7 8 9
|
ServerSocket ecoute = new ServerSocket(PORT);
while (true) {
service = ecoute.accept();
Thread serviceThread = new Thread (new ServiceThread() );
serviceThread.start();
serviceThread.setName("connect thread");
} |
Code:
1 2
|
while ( (message = rd.readLine()) != null) { |
Quel est votre avis là dessus ?
Merci pour votre aide.
Salutations
Connection à la base de donnée et requête jdbc
Bonjour,
Concernant l'application client, que feriez-vous pour par exemple rendre les appel jdbc ResultSet, prepareStatement, Connection etc non bloquant et réactif ?
Merci de me répondre
Salutations
Choix de la nouvelle base de donnée
Bonjour,
Comme base de donnée j'avais borland jdatastore et il faudrait maintenant trouver une autre solution durable portable sur tous les système et sur une clef USB.
Cette base de donnée devrait être à fichiers amovible et si possible open source pour éviter des coût lié à des logiciels propriétaire dont vous apprenez un jour qu'il n'est plus vendu et plus supporté. J'ai eus la même chose plusieurs fois
Et bien sur la réactivité devrait être à considérer.
En parlant d'autre chose j'ai également entendu dire dans un des épisodes de nipdev consacré à neosql qu'il était difficile dans un schémas relationnel classique de rajouter des table au model et des champ à une table une fois la base de donnée chargée.
Pourriez-vous m'aider a choisir une nouvelle base de donnée durable avant d'effectuer une migration ?
Je précise que jdatastore était transactionnel et que donc ça dois être le ça de la nouvelle base.
Merci pour votre aide
Salutations