Migrazione da RPG a Java su un iSeries IBM


La nostra azienda utilizza un iSeries IBM per la maggior parte del nostro trattamento dei dati. Tutte le nostre applicazioni interne sono scritte in RPG. Secondo la roadmap di IBM, IBM sta spingendo le aziende a passare a Java / J2EE. Stiamo cercando di modernizzare le nostre app interne a un'interfaccia più GUI. Forniamo una presenza web esterna utilizzando Asp.Net webs, anche se forse i progetti greenfield potrebbero essere Java. Un'opzione è quella di utilizzare un'app scraper dello schermo mentre si rimane su RPG ma penso che potrebbe essere meglio andare lentamente per la strada di Tabella di marcia di IBM e passare a Java. Il nostro obiettivo è migrare a un'interfaccia GUI e essere in linea con la roadmap di IBM.

Sei stato coinvolto con una migrazione RPG a Java, anche se solo i progetti greenfield erano Java e i progetti brownfield sono rimasti RPG?

La mia direzione ha paura che:

1) l'aggiornamento di JRE sulle workstation, in particolare sui thin client, potrebbe causare un incubo amministrativo (la nostra azienda utilizza l ' 80% di thin client e il 20% di PC) e

2) Anche Java richiede molto sovraccarico della workstation per funzionare in modo efficace

3) Incompatibilità tra i client JRE mentre aggiorniamo, potenzialmente rompendo altre app che richiedono il JRE.

Puoi far luce su questo? Ci sono enormi benefici? Qualche trucco enorme?

CHIARIMENTO: sono interessato solo a una migrazione a Java. Qual è il livello di difficoltà e perdo qualcosa quando vado da RPG a Java? Gli schermi sono molto reattivi quando migrati a Java?

Author: Bill Martin, 2011-11-22

4 answers

La mia azienda sta anche tentando di migrare a Java da RPG.

  1. Non stiamo tentando di utilizzare un JRE su un thin-client, stiamo passando alle applicazioni Web fornite tramite un browser. Ciò potrebbe comportare (eventualmente) la sostituzione dei nostri vecchi scanner POS con alcuni dei più recenti basati su PC.
  2. Sono stato informato (dagli architetti della società) che la JVM sul sistema operativo iSeries ha alcuni problemi di prestazioni. Non so personalmente quali siano queste limitazioni. Nel nostro nel caso in cui la migrazione abbia comportato l'allocazione di una risorsa AIX, che dovrebbe essere molto meglio - parla con il tuo rappresentante IBM se hai solo bisogno di acquistare la licenza del sistema operativo (ho solo programmato la cosa, non mi faccio coinvolgere nell'hardware).
  3. Cfr.risposta alla domanda 1. In un contesto più ampio, in cui si sta tentando di aggiornare il browser (o qualsiasi altra risorsa), questo viene solitamente gestito da licenze enterprise-la maggior parte avrà opzioni per consentire forzato, remoto aggiornare.

Alcune altre note:

  • Si dovrebbe essere in grado di passare al solo utilizzo di.NET, anche se potrebbe essere necessario diverso hardware/partizioni per eseguire l'ambiente. Puoi parlare con DB2 in questo modo, almeno. L'unico vantaggio che Java ha è che verrà eseguito sullo stesso sistema operativo/hardware del database.
  • Ho visto un'applicazione screenscraper qui (era in VB.NET, ma sono abbastanza sicuro che l'esempio si applica). Screen-scraping è stato realizzato da ottenere / mettere caratteri in posizioni specifiche sugli schermi (l'equivalente di substring()). Potrebbe essere solo l'API che stavamo usando-penso di aver sentito parlare di soluzioni che erano in grado di leggere i nomi dei campi. Tuttavia, si basava anche sul flusso del programma RPG per la sua logica, e non era altrimenti gestibile.
  • La maggior parte dei programmi RPG che ho visto e scritto tendono ad essere una violazione di MVC, il che significa che non si può fare niente di meno che test di integrazione - la storia e l'architettura del la lingua stessa (e alcuni sviluppatori) preferisce che tutto (accesso ai file alla visualizzazione dello schermo) sia in un unico file. Questo renderà anche il tentativo di avvolgere RPG per chiamare in remoto in modo efficace impossibile. SE hai correttamente separato tutto in Programmi di servizio, dovresti essere in grado di avvolgerli (come l'equivalente di una chiamata al metodo nativo, quasi) ordinatamente-sfortunatamente non ho visto nulla qui che non tendesse a fare affidamento su uno o più trucchi che non reggerebbero per tipico uso Web (ad esempio, utilizzando un file in QTEMP per controllare l'esecuzione del programma - la sessione su iSeries scompare effettivamente ogni volta che viene richiesta una nuova pagina...).
  • Java come linguaggio tende a promuovere una migliore separazione del codice (si noti che può essere abusato altrettanto male), in quanto non ha abbastanza la storia di RPG. In generale, può essere utile pensare a Java come un linguaggio in cui tutto è un programma di servizio, in cui tutti i parametri vengono passati con VALUE set, OPTIONS(*nopass : *omit) non è consentito, CONST è generalmente raccomandato, e la maggior parte dei parametri sono di tipo DS (datastructure - questo è un tipo distinto in RPG) e passati in giro per puntatore. I parametri del livello del modulo sono disapprovati, se si preferisce incapsulare tutto nelle strutture dati passate o nelle procedure del programma di servizio stesso. STATIC ha un uso leggermente diverso in Java, rendendo la variabile globale e non è disponibile all'interno delle procedure.
  • RPG è un po ' più semplice di Java, in generale, e la programmazione OO è un paradigma piuttosto diverso. Ecco alcune cose che rischiano di far inciampare gli sviluppatori che migrano a Java:
    1. Gli array in RPG iniziano da 1. Gli array in Java iniziano da 0.
    2. Java non ha parametri "ouput" e tutti i tipi primitivi vengono passati per valore (copiati). Ciò significa che la modifica di un numero intero non sarà visibile nei metodi di chiamata.
    3. Java non ha codifica impacchettata / firmata, e quindi la traduzione da / verso numeri / stringhe è più coinvolta. data il tipo in Java ha anche alcuni problemi seri (include il tempo, una specie di), ed è molto più difficile da cambiare in modo significativo a/da una rappresentazione di caratteri.
    4. È più difficile leggere/scrivere file in Java, anche quando si utilizza SQL (e dimenticare di usare I/O nativi direttamente con Java) - questo può essere mitigato in qualche modo con un buon framework, tuttavia.
    5. Non ci sono operatori ENDxx in Java, tutto utilizza parentesi ({}) per specificare l'inizio/la fine dei blocchi.
    6. Tutto in Java è in freeformat e non ci sono specifiche colonnari di alcun tipo (anche se le firme delle procedure sono ancora richieste). Non c'è hardlimit sulla lunghezza della linea, anche se ~80 caratteri è ancora raccomandato. Gli strumenti (i gratuiti , anche) sono migliori, punto e generalmente molto più utili (anche se possono richiedere un po ' di tempo per abituarsi a quelli esposti alla SEU). Ci sono anche enormi librerie gratuite disponibili per il download.
    7. Il segno = non è sensibile al contesto in Java il modo in cui è in RPG, è sempre utilizzato per le assegnazioni. Utilizzare l'operatore double-equals, == per i confronti dei valori in Java.
    8. Gli oggetti
    9. (datastructures) non possono essere confrontati in modo significativo con ==: spesso è necessario implementare un metodo chiamato equals().
    10. Le stringhe non sono mutabili, non possono essere modificate. Tutte le operazioni eseguite su stringhe (sulla classe/datastructure stessa o da librerie esterne) restituiscono riferimenti nuovi di zecca. E sì, le stringhe sono considerate datastructures , non tipi di valore, quindi non è possibile confrontarle nemmeno con ==.
    11. Non ci sono equivalenti incorporati alle direttive /copy pre-compilatore. Il tentativo di implementarli sta usando Java in modo errato. Poiché questi sono solitamente usati per gestire il codice 'boilerplate' (definizioni di variabili o codice comune), è meglio gestirlo nell'architettura. Variabile (TUTTE le specifiche D, in realtà) definitons saranno gestiti con import o import static istruzioni, mentre le varianti di codice comune sono solitamente gestite da un framework o definiscono una nuova classe.

Sono sicuro che ci sono un certo numero di altre cose là fuori, fatemi sapere se avete altre domande.

 14
Author: Clockwork-Muse, 2011-11-21 23:19:24

Distribuire e gestire un cliente grasso sarebbe un incubo assoluto.

La soluzione ideale è un'applicazione web basata su Java ospitata su iSeries. Le workstation accedono alle tue applicazioni tramite un browser web proprio come ASP.NET.

Ho usato il framework Grails per modernizzare e creare nuove applicazioni e sta funzionando meravigliosamente.

 3
Author: jamesallman, 2011-11-21 22:12:47

Quando IBM dice che dovresti passare a Java / J2EE, probabilmente dovresti spostare le tue applicazioni su applicazioni Web come la tua asp.net applicazioni web. Probabilmente dovresti usare un'interfaccia ricca di funzionalità come JSF o GWT.

Le applicazioni Web non devono preoccuparsi dei problemi JRE in quanto è sufficiente un browser standard.

Tuttavia non conosco RPG e non conosco la strategia di migrazione suggerita.

 2
Author: Udo Held, 2011-11-21 21:32:02

Sono uno sviluppatore coinvolto nella modernizzazione as400. Finora, dalle mie esperienze, posso darti le mie intuizioni.

Oltre ai siti Web basati su Java EE, probabilmente puoi optare per i servizi Web basati su jax-ws, che forniscono servizi per diversi schermi piatti e griglia.

I clienti possono consumarli in qualsiasi tecnologia desiderino. C'è qualche ritardo, ma l'usabilità complessiva è buona come nelle normali applicazioni basate sul Web.

 0
Author: Sumit Bisht, 2013-05-13 06:49:02