Je ne vais pas répondre à ta question, n'ayant jamais eu à porter du
Cobol vers du Java, cela dit ton projet m'interpelle et j'ai quelques
questions :
- faire du batch avec du Java va poser clairement la question du
démarrage de la JVM. Ce n'est pas une opération gratuite, il faut bien
compter quelques secondes pour cela. Comment cela est-il compatible avec
les performances attendues ?
- ne serait-il pas plus simple d'avoir une JVM pré-chargée avec le code
à exécuter, et d'avoir des scripts (shell ou autre) qui déclanchent
l'exécution de ce code au travers d'une invocation type REST ou autre ?
Cela éviterait d'avoir à lancer une JVM à chaque fois
A froid, si on ne peut pas éliminer $U, c'est un peu ce que je ferai...
pas vous ?
--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com
Le 4/19/12 11:25 AM, jeremy.herault a écrit :Je ne vais pas répondre à ta question, n'ayant jamais eu à porter du Cobol vers du Java, cela dit ton projet m'interpelle et j'ai quelques questions :
Bonjour,
Dans le cadre d'une migration potentielle de batchs Cobol vers Java,
et dans le cadre d'un développement from scratch de batchs Java,
j'aurais voulu avoir des retours d'expériences sur les technos que
vous avez pues utiliser, ainsi que le volume de données manipulées
lors des traitements. Je précise qu'il s'agit de migration à la mano,
pas de fainéantise en utilisant un traducteur Cobol-->Java quel qu’il
soit.
Pour vous situez dans quel cadre je me situe, le scheduler utilisé (et
qui le restera) est $U (Dollar Universe). Actuellement, il ordonnance
des scripts UNIX dans lesquels les appels aux programmes Cobol sont
effectués. Le volume de données manipulées par les batchs Cobol va de
plusieurs centaines de milliers au million de lignes.
- faire du batch avec du Java va poser clairement la question du démarrage de la JVM. Ce n'est pas une opération gratuite, il faut bien compter quelques secondes pour cela. Comment cela est-il compatible avec les performances attendues ?
- ne serait-il pas plus simple d'avoir une JVM pré-chargée avec le code à exécuter, et d'avoir des scripts (shell ou autre) qui déclanchent l'exécution de ce code au travers d'une invocation type REST ou autre ? Cela éviterait d'avoir à lancer une JVM à chaque fois
A froid, si on ne peut pas éliminer $U, c'est un peu ce que je ferai... pas vous ?
Le 4/19/12 11:25 AM, jeremy.herault a écrit :
> Bonjour,
>
> Dans le cadre d'une migration potentielle de batchs Cobol vers Java,
> et dans le cadre d'un développement from scratch de batchs Java,
> j'aurais voulu avoir des retours d'expériences sur les technos que
> vous avez pues utiliser, ainsi que le volume de données manipulées
> lors des traitements. Je précise qu'il s'agit de migration à la mano,
> pas de fainéantise en utilisant un traducteur Cobol-->Java quel qu’il
> soit.
>
> Pour vous situez dans quel cadre je me situe, le scheduler utilisé (et
> qui le restera) est $U (Dollar Universe). Actuellement, il ordonnance
> des scripts UNIX dans lesquels les appels aux programmes Cobol sont
> effectués. Le volume de données manipulées par les batchs Cobol va de
> plusieurs centaines de milliers au million de lignes.Je ne vais pas répondre à ta question, n'ayant jamais eu à porter du
Cobol vers du Java, cela dit ton projet m'interpelle et j'ai quelques
questions :
- faire du batch avec du Java va poser clairement la question du
démarrage de la JVM. Ce n'est pas une opération gratuite, il faut bien
compter quelques secondes pour cela. Comment cela est-il compatible avec
les performances attendues ?
- ne serait-il pas plus simple d'avoir une JVM pré-chargée avec le code
à exécuter, et d'avoir des scripts (shell ou autre) qui déclanchent
l'exécution de ce code au travers d'une invocation type REST ou autre ?
Cela éviterait d'avoir à lancer une JVM à chaque fois
Keep it simple, je crois que c'est la clé.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msg/lescastcodeurs/-/Ygs29z-cMiAJ.--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
Pour envoyer un message à ce groupe, adressez un e-mail à lescast...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse lescastcodeur...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/lescastcodeurs?hl=fr
Salut Manuel,As-tu plus d'infos ou peux-tu en dire un peu plus ? quels sont les types de traitements que tu as réalisés et par rapport à ces types quelle est la solution que tu as utilisée ? as-tu également une fourchette sur le volume de données que tu as manipulé ?
Merci
Pour envoyer un message à ce groupe, adressez un e-mail à lescastcodeurs@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse lescastcodeurs+unsubscribe@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/lescastcodeurs?hl=fr
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
Pour envoyer un message à ce groupe, adressez un e-mail à lescastcodeurs@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse lescastcodeurs+unsubscribe@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/lescastcodeurs?hl=fr
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
Cette discussion peut être lue sur le Web à l'adresse https://groups.google.com/d/msg/lescastcodeurs/-/6vkhn0pjOlAJ.
Benito d'ALMEIDA
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
> Pour envoyer un message à ce groupe, adressez un e-mail à lescast...@googlegroups.com.
1/ des gros soucis avec les drivers sql utilisés qui étaient assez pourris, dans notre cas c'était le driver
mysql qui ne gérait pas du tout le fetch-size correctement, a savoir même en l'initialisant le driver montait
tous les résultats des querys en mémoire d'ou des gros soucis de OutOfMemory et de lenteur.
On avait finit par solutionné en découpant nos querys avec les clause LIMIT de mysql, workaround a plein pif quoi.
2/ les reprises sur erreur SQL, cas typique l'admin qui décide de rebooter la base alors que le traitement
est en cours, casse burnes mais il ne voulait pas en démordre.
La solution apporté était de redévelopper une couche entre le driver et le code pour gérer toutes les exceptions SQL
afin de faire de la reconnexion automatique sans perte, bien sur certains cas sont ingérable au niveau bas il faut
les remonter dans le code métier, cela à donc un impact sur la façon de coder les batchs.
3/ fonctionnalité de batchs du driver jdbc mysql ne servant à rien si ce n'est coller les perfs au tapis
4/ faire attention aux faux amis de jdbc, genre modification d'un query pendant son execution, en fait cela genérait
de l'update en douce, effroyable pour les perfs !
5/ j'avais eu des soucis énormes sur les perfs avec jdbc en général sur des traitement bulk, grosso modo la solution
appliquée et validée à l'époque par le consultant mysql avec été de faire des dump des données a traiter dans
des fichiers plat, traiter les données dans le fichier plat, puis import bulk du fichier dans la base. bien crade
mais on avait des ratios de fois 10 au niveau des perfs.
bref, fait très attention au driver jdbc, le gros des problèmes venait de lui !
Pat
Je ne comprends pas ce qui vous fait que Java n'est pas adapté au batch.
Et non il ne faut mieux pas utiliser Hibernate pour du batch en effet.
parce que c'est un langage orienté objet, pour écrire des batchs l'idéal c'est un langage orienté donnéesce qu'il n'est pas.

Tout dépend du temps d'exécution des jobs de batchs actuels.
S'ils durent des minutes ou des heures, le coup de démarrage de la JVM
sera insignifiant.
> A froid, si on ne peut pas éliminer $U, c'est un peu ce que je ferai... pas
> vous ?
dans l'idéal oui, un Jenkins ferait parfaitement l'affaire.
Reste que $U c'est du giron des équipes de production qui n'ont peut
être pas envie de retoucher des chaines de productions qui datent de
plusieurs années.
pour moi, la problématique principale ne vient pas de la conversion des batchs vers Java mais plutôt de la conversion des données.
Parce que si tu te contentes de traduire les batchs en Java et de laisser les données sur le Z, alors autant aller crier "Vive Mélenchon" à un meeting MLP.
J'ai vu des batchs Java fait avec Hibernate et le problème ne venait pas d'Hibernate mais plutot de l'utilisation qui en était faite (pas de cache secondaire, multitude de sessions établies)
Bonjour,
Dans le cadre d'une migration potentielle de batchs Cobol vers Java,
et dans le cadre d'un développement from scratch de batchs Java,
j'aurais voulu avoir des retours d'expériences sur les technos que
vous avez pues utiliser, ainsi que le volume de données manipulées
lors des traitements. Je précise qu'il s'agit de migration à la mano,
pas de fainéantise en utilisant un traducteur Cobol-->Java quel qu’il
soit.
Pour vous situez dans quel cadre je me situe, le scheduler utilisé (et
qui le restera) est $U (Dollar Universe). Actuellement, il ordonnance
des scripts UNIX dans lesquels les appels aux programmes Cobol sont
effectués. Le volume de données manipulées par les batchs Cobol va de
plusieurs centaines de milliers au million de lignes.
Merci pour vos retours.
--
Jérémy
> Bonjour,
>
>
> Au bout de plusieurs itérations, on avait pu rendre le système assez générique pour traiter aux tâches (autre que le parsing xml) et le temps de traitement global a été fortement réduit par rapport à la version C (car on avait pu paralléliser les traitements et répartir la charge sur différentes machines).
Surtout que pour avoir benché cette partie les implémentations xml/xsl en C sont pourris comme ce n'est pas permis,
leur équivalent dans le monde java est au bas mot 5 à 10 fois plus rapide !
Pour ce genre de traitement je pars sur du java directement !
Pat
Et pourtant dans tes batchs, il y a bien des traitements métiers à appliquer avec une logique de coneption, etc ...Du coup ton language orienté donnée, il est à la ramasse sur la structuration et l'algorithmie.
Le problème de java, c'est qu'il est calqué sur C/C++ et donc c'est un
langage générique, fait pour faire de la programmation système de bas
étage pas du tout fait pour gérer des problématiques de traitement par
lot, de la reprise sur erreur, la gestion des codes de retour,
etc...
surtout si ta base de données ne l'est même pas.
Mais sinon d'accord avec toi sur les ETL, je trouve certains produits très bien pensés et très efficace pour des batchs !
On 24 avr, 15:55, Manu <mekt...@gmail.com> wrote:
> 2012/4/24 David Screve <david.scr...@gmail.com>
>
> > surtout si ta base de données ne l'est même pas.Oui, mais rien ne dit qu'un langage objet apportera réellement un plus
>
> La base de données n'est pas objet en effet masi ca ne concerne que les
> données
> pas le programme qui les manipulent qui lui peut l'être :)
dans la mesure où on n'a pas forcément besoin de cela...Le principal
intérêt d'un langage objet, c'est quand les structures de données en
mémoire sont complexes, où il y a des besoins de polymorphisme, de
généricité et autres bidule qui n'ont aucun intérêt ici. du coup, tu
vas perdre du temps à transformer des données relationnelles en
données objets, les traiter, puis refaire la transformation inverse.
Il te faut un langage pour décrire des transformations, des agrégats,
etc...sur des lots de données, avec des traitements avancés de
rollback, et une gestion efficace des code de retour. Un langage pour
le batch doit aussi savoir traiter les dépassements d'horaires et tous
ces trucs qu'il va falloir coder à la main dans un langage classique.
Mais je reconnais qu'après 30 ans à vendre de l'objet dans les
langages généralistes type C++, Java ou C#, ce n'est pas évident
d'avoir à l'idée qu'on peut faire autrement avec des langages plus
adaptés.
Le 24 avril 2012 15:55, Manu <mek...@gmail.com> a écrit :Mais sinon d'accord avec toi sur les ETL, je trouve certains produits très bien pensés et très efficace pour des batchs !Ca fait un moment que j'ai pas regardé les ETL, il se fait quoi depuis Talend?
--
Je pense que c'est un faux débat. L'adéquation d'un langage par rapport
à un besoin fonctionnel donné ne s'étudie pas par rapport à la capacité
du dît langage à traiter rapidement (ou pas) les données en
input/output. Dire qu'un langage objet va 'perdre du temps à transformer
des données relationnelles en données objets', c'est passer sous silence
que le temps de transformation, pour autant qu'il soit supérieur en
langage Objet par rapport à un langage structuré type C, est totalement
sans importance quand on le met en rapport avec le temps d'accès aux
données en elles mêmes.
Et je parle d'ordres de magnitude, ici.
Après, que Java pur soit insuffisant pour traiter des problématiques
batch, clairement, oui. Mais c'est le cas de tout langage. Ce qui
importe, c'est l'outillage qui vient avec le langage. Un bon ETL sera de
toute manière plus performant, même écrit en Java, en première approche,
que le même traitement écrit à la mano, si on considère que ce
développement spécifique n'aura pas forcément pris en compte les
différents aspects techniques impactant les perfs.
C'est peut-être aussi pour cela qu'il existe encore plein de
développeurs COBOL, qui codent au plus près des données, plutôt que de
confier ces tâches à des développeurs Java, ce qui imposera des
transferts de données très coûteux...
Je pense qu'il serait plus intéressant de revenir dans le cadre de la
question initiale : existe-t-il de bons frameworks en Java, en dehors de
Spring-batch, qui aiderait un développeur sans le contraindre à
réinventer la roue ?
NIH syndrom, on n'a rien inventé de pire depuis le VIH...
--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com
Mais aucune idée si c'est du tout bon ou de la crotte en barre...
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
Pour envoyer un message à ce groupe, adressez un e-mail à lescastcodeurs@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse lescastcodeurs+unsubscribe@googlegroups.com.
On est *toujours* loin des données, quand il s'agit de les traiter par
millions...
David
David
Je ne cherche rien à part un bon échange d'argument et des avis critiques pour me chambouler/conforterdans mes idées : c'est ça un débat. Il n'y a que toi à prendre ça comme un avis d'évangéliste ou d'intégriste.Mais il est vrai que dans ce genre d'échange, on a tendance à prendre une position un peu tranchée pourpousser l'autre dans ses retranchements et du coup éprouver les idées de chacun !Je n'ai jamais dit, mettez du Java partout dans toutes les applis quoi qu'elle fasse.Je suis aussi partisant d'utiliser un langage adapté dans chaque situation.Tu as une tendance à prendre des racourcis et à tirer des conclusions attives, fait attention ;)
Je défendais juste l'idée que le langage Java soit tout à fait adapté à écrire un batch et que de mon pointde vue, un langage orientée donnée ne solutionne pas tout non plus ...Mais bon, je commencais aussi à arriver à la conclusion qu'on avait fait le tour du débat !Mais j'y peux, je suis toujours attiré par les joutes verbales (ou écrites), c'est mon côté démocratie participative ;)))
Mais moi je débat et je ne m'énerve pas par contre, j'écoute les arguments de l'autre et j'y réflechis calmement.
Manuel, calme et détendu :)
oh, si, oh, si.
C'est pour cela que le C oblige a mettre les d�clarations avant les
d�finitions.
En Object ou en fonctionnel, c'est tr�s facile de ne pas avoir ce genre
de limitation,
en C de base c'est tout de suite bcp plus chiant (basiquement tu as
besoin de continuation).
> En pratique, l'�criture d'un compilateur dans un langage Objet
> n'apporterai pas grand chose (m�me si on consid�re qu'avec antlr,
> l'�criture d'un compilo en Java est une t�che relativement ais�e, cela
> n'implique pas qu'il faille utiliser massivement l'h�ritage ou
> l'encapsulation).
Le compilo est un endroit o� justement tu as de beau arbre d'h�ritage
pour l'arbre de syntaxe,
l'arbre des types et o� tu fait de l'annotation d'arbre et de la
r�-�criture d'arbre.
Oui tu peux tout faire en C, mais un language Objet ou fonctionnel te
rendra les choses
bcp plus ais� car tu pourra utiliser respectivement du pattern-matching
ou le visitor pattern.
>
> Ou alors ta phrase manque de contexte... Tu peux pr�ciser ta pens�e ?
>
>
salut,
R�mi
Dans ce cadre, oui, lex/yacc/etc est indispensable. Je me suis tapé des
tables shift/reduce à la main pendant mes études, merci, plus jamais ! :)