2010-03-29 23 views
17

sono impiegato in una abbastanza grande società qui in Germania e ottenuto il lavoro per creare il sito principale per questo che sarà caratterizzato da:Cobol web di sviluppo/di hosting risorse

  • contenuti statici; Informazioni e presentazioni
  • Un'area dipendente (circa 6000 dipendenti) che caratterizzano le varie cose da calendari, le descrizioni di posti di lavoro, una sorta di gruppi
  • troppe altre cose dinamici non posso elencare qui

ho deciso usare COBOL per il lavoro, può essere molto sottovalutato, ma è un linguaggio molto potente, specialmente per le applicazioni aziendali e, come dicono i miei colleghi, anche lo sviluppo web (2.0).

Ho anche bisogno di usare COBOL perché in esso è programmato tutto il sistema di backend e transazioni dell'azienda (alcune piccole parti sono state programmate anche in LISP, non so esattamente perché). Ho anche ricevuto un'API che rende possibile l'uso di COBOL con MySQL facilmente.

Questo è un grande progetto e richiederà probabilmente più di 2 mesi di programmazione.

  • Cosa devo aspettarmi quando si crea un'enorme app Web in COBOL?
  • Sono disponibili framework Web per COBOL? Una specie di MVC?
  • Esistono buone risorse per lo sviluppo web pratico con COBOL?

Grazie in anticipo

+1

è la piattaforma IBM i-series, chiamato anche un AS/400? –

+0

Pete Duncanson: Questa non è una domanda scherzo, devo usare COBOL per questo progetto e ho sentito che non è così male come tutti dicono. S. Lott: No, useranno OpenCobol di compilare il progetto e quindi associare a CGI, io non sono così familiarità con questo processo, anche se, come questo è solo l'inizio del progetto. Scusa anche il mio pessimo inglese, tedesco, lo sai. – felixm

risposta

16

Cosa devo aspettarmi quando si crea un'enorme app Web in COBOL?

Ci vorrà molto tempo. Framework come Django, Ruby on Rails o CodeIgniter sono progettati specificamente per creare siti Web in pochissimo tempo.

La maggior parte di questi framework può creare siti Web con contenuti dinamici funzionanti in 20 minuti. COBOL non può. A meno che tu non possa digitare molto velocemente, probabilmente avrai pochissimo codice lavorabile nel tempo in cui potresti imparare e costruire un sito con uno strumento più moderno.

Sono disponibili strutture Web per COBOL ? Una specie di MVC?

Chiedere ora questa domanda indica che la scelta dell'utilizzo di COBOL è davvero una pessima idea.

La strategia abituale è quella di scegliere prima il framework. Dopo aver fatto la scelta del framework, sopportiamo il linguaggio richiesto per sfruttare tale framework.

Tuttavia, c'è sempre http://www.coboloncogs.org/HOME.HTM

Esistono buone risorse per pratico web-sviluppo con COBOL?

http://search.barnesandnoble.com/COBOL-Programming-Using-the-NET-Framework/Ronald-D-Reeves/e/9780130668431

sviluppo web pratico è fatto con framework specifici per il web. Qualunque dozzina di framework web Python, Ruby on Rails, uno qualsiasi dei framework PHP, uno qualsiasi dei framework Java. Sono altamente specializzati nella realizzazione di siti Web in modo rapido ed economico.

COBOL non è altamente specializzato per questo. Né (al di fuori della i-Series) qualcuno considera seriamente COBOL per lo sviluppo web.

La tua migliore speranza sarebbe quella di utilizzare il maggior numero possibile di librerie esterne e scrivere il meno COBOL possibile. Devi fare un uso pesante delle funzionalità COBOL in C di OpenCOBOL per lavorare con le API del linguaggio C e - in effetti - costruire il tuo sito in C con un wrapper COBOL.

+6

Come programmatore COBOL a tempo pieno "hard core" e sviluppatore web "small time", sono d'accordo con S.Lott. Non utilizzare COBOL per lo sviluppo web front-end! Farà davvero del male! D'altra parte, sfruttare i sistemi COBOL per fornire il supporto di back-end per le applicazioni Web può essere un'opzione ragionevole. – NealB

+0

@NealB: Molte persone fanno esattamente questo: il front-end Web inizia l'elaborazione back-end tramite i programmi COBOL. –

+0

Come detto NealB, utilizzare COBOL per interfacciarsi con i sistemi back-end esistenti. La web part è così diversa dal tipo di applicazioni per cui è stato creato COBOL. Pensa all'interfacciamento con i server web, utilizzando HTTP, gestendo i dati dei moduli non elaborati, generando HTML e JSON. Ci vorrà molto tempo a fare COBOL a fare cose che altri sistemi supportano in modo nativo. Scegli un framework web, crea un livello di servizio basato su REST o SOAP che esponga funzioni da sistemi esistenti e utilizzi COBOL per implementare tali servizi. – Kwebble

9

favore, per favore, si prega di non utilizzare COBOL per questo. Chiunque debba supportare il sito in futuro ti ringrazierà per aver scelto uno strumento più ... moderno.

Si consiglia di utilizzare un framework Web per scrivere il front-end, ad esempio PHP, ASP.NET MVC, ecc. Quindi creare un'API (o un processo separato con una sorta di interfaccia, se necessario) che consentirà a tale strumento di comunicare con il back-end COBOL. Ciò ti consentirà di utilizzare il framework web sul front-end - dove risplenderà - consentendo al tempo stesso di sfruttare il significativo investimento della tua azienda in COBOL.

+0

Devo usare COBOL, come detto. – felixm

+5

@felixm: "Ho deciso di usare COBOL" sembra che tu stia prendendo una decisione sbagliata. "Devo usare COBOL" suona come se qualcun altro prendesse una decisione sbagliata. Chi - in particolare - sta prendendo questa cattiva decisione? Perché sei costretto a usare COBOL? Chi ti sta costringendo? –

+2

Pensavo avessi deciso di usarlo? In ogni caso, vi consiglio di utilizzare un framework web di scrivere il front-end, come PHP, ASP.NET MVC, ecc Quindi creare un'API (o di un processo separato con una sorta di interfaccia, se necessario) che permetterà quello strumento per parlare al tuo back-end COBOL. Ciò ti consentirà di utilizzare il framework web sul front-end - dove risplenderà - consentendo al tempo stesso di sfruttare il significativo investimento della tua azienda in COBOL. –

1

fornire un prodotto denominato Enterprise Server che consente a COBOL di interagire con i servizi Web.

Se si dispone di un programma COBOL A e di un altro programma COBOL B e A di chiamate B tramite la sezione interfaccia, lo strumento consente di esporre la sezione di interfaccia di B come servizio Web.

Per il programma A, viene quindi generato un proxy client e A può ora chiamare B tramite un servizio Web.

Naturalmente, perché B ha ora un servizio web di qualsiasi altro tipo di programma (a riga di comando, l'applicazione di Windows, Java, ASP, ecc) possono ora anche chiamare.

Hanno anche un altro prodotto "COBOL.Net", che fornisce un interprete per .NET IL per programmi COBOL.

Perché questo è sulla piattaforma .NET, è possibile mix-and-match con C# ecc

Ciò consente il meglio di entrambi i mondi. Si mantiene il back-end COBOL esistente ma è possibile sviluppare l'applicazione Web con strumenti moderni, ad es. ASP/MVC/Struts/JSP. E concateni i due insieme con un servizio web.

+0

In base ai commenti del poster originale, sembra che stiano usando OpenCOBOL, che è fondamentalmente un traduttore COBOL in C. Forse hanno intenzione di sfruttare questa "caratteristica" per uscire dalla scatola COBOL. – NealB

1

Se si deve utilizzare Cobol perché è necessario integrarsi con alcune API COBOL legacy, in che modo si utilizza Cobol per esporre i dati tramite alcune API RESTful (o simili). Quindi scrivi la tua app Web in qualcosa di moderno come Django (che è molto bello). L'app web Python potrebbe quindi accedere facilmente ai dati necessari tramite l'API RESTful che stai fornendo in Cobol.

Ciò consentirebbe di utilizzare lo strumento giusto per ogni lavoro: una moderna struttura di app Web per l'app Web e alcuni codici Cobol per esporre i dati a cui si dispone solo di un'API Cobol.

4

La reazione iniziale la maggior parte delle persone hanno di sviluppare un'applicazione web in COBOL è molto negativo!

In generale, sono d'accordo, e non consiglia di utilizzare COBOL per front-end di sviluppo web semplicemente perché ci sono altri strumenti che vengono con un sacco di supporto pre-confezionati per la costruzione di questo tipo di applicazione. Il supporto generalmente viene fornito tramite la libreria componenti aggiuntivi e interfacce predefinite per i servizi Web. Il linguaggio di implementazione è meno importante.

Come esempio, Ruby on Rails è un framework di applicazione basato sul modello MVC che utilizza Ruby (lingua) per "incollare" tutto insieme. Un bel po 'del tuo sforzo di sviluppo evapora finché ti attieni al framework Rails. Tuttavia, rompi il framework e potrebbe davvero rovinarti. Vedo usando framework come Ruby on Rails ideali per nuovi sviluppi in cui controlli tutto da zero.

La tua situazione potrebbe essere un po 'diversa per. Se ho capito bene, l'utente ha una base di applicazioni COBOL e un database mySQL che devono essere integrati in una nuova applicazione web. Il framework Rails può essere o meno particolarmente utile in questo contesto. Tutto dipende da come ti "incontri nel mezzo". È una pratica del settore abbastanza comune utilizzare potenti strumenti abilitati per il Web per le applicazioni Web front-end con back-end basati su COBOL. Rendere insieme i due elementi è un modulo di dimensioni discrete specifico per la piattaforma.

Gli stessi commenti si applicano a qualsiasi altro framework di applicazione Web e set di strumenti. Ho solo usato Ruby on Rails come esempio. La conclusione è che non molte persone (me tra loro) hanno riflettuto molto sul fronting di un'applicazione web utilizzando COBOL.

Nonostante ciò, ho notato che stai usando openCobol nel tuo negozio. Questo potrebbe rendere l'edificio una soluzione solo COBOL una prospettiva ragionevole. A differenza di molte implementazioni COBOL, openCobol viene fornito "web ready" e ha un database independent abstract layer quindi ottenere il proprio database mySQL dovrebbe essere abbastanza semplice. La prontezza del web è in parte una conseguenza di openCobol che utilizza l'interfaccia binaria di applicazione C (ABI). La C ABI dovrebbe facilitare notevolmente il lavoro in un ambiente di linguaggio misto e rende molto banale l'interazione con una CGI (Common Gateway Interface) graziosa ; come si può vedere da questo example.

OpenCobol rende fattibile un'applicazione web, ma è pratico? Come notato in precedenza, a meno che non ci sia un framework per applicazioni web documentato su cui basarsi, lo finirà per farne un sacco da soli. Penso che potresti essere già giunto a questa conclusione quando pubblichi la tua domanda. Per quanto posso dire, lo sviluppo di tale framework è anche fattibile ma non esiste ancora. Se vai avanti con questo progetto, potresti contribuire allo sviluppo di un framework per applicazioni web per openCobol.

Ho trovato il riferimento "Cobol on Cogs" nella risposta accettata un po 'ingiusto, hai posto una domanda seria e meritavo una risposta completamente seria.Questo tipo di riferimento riflette probabilmente un po ' di "rosso dal collo" mentale chiuso verso COBOL (Sì, sono pronto e in attesa giù voti su questo).

5

aver pubblicato il campione OpenCOBOL per CGI e AJAX, vorrei solo aggiungere, andare per esso. COBOL può fare i frontend.

>>SOURCE FORMAT IS FIXED 
    ****************************************************************** 
    * Author: Brian Tiffin, Francois Hiniger 
    * Date:  30-Aug-2008 
    * Purpose: Display the CGI environment space 
    * Tectonics: cobc -x cgienv.cob 
    * Move cgienv to the cgi-bin directory as cgienv.cgi 
    * browse http://localhost/cgi-bin/cgienv.cgi or cgienvform.html 
    ****************************************************************** 
    identification division. 
    program-id. cgienv. 

    environment division. 
    input-output section. 
    file-control. 
     select webinput assign to KEYBOARD. 

    data division. 
    file section. 
    fd webinput. 
     01 postchunk  pic x(1024). 

    working-storage section. 
    78 name-count  value 34. 
    01 newline   pic x value x'0a'. 
    01 name-index  pic 99 usage comp-5. 
    01 value-string pic x(256). 
    01 environment-names. 
     02 name-strings. 
     03 filler pic x(20) value 'AUTH_TYPE'. 
     03 filler pic x(20) value 'CONTENT_LENGTH'. 
     03 filler pic x(20) value 'CONTENT_TYPE'. 
     03 filler pic x(20) value 'DOCUMENT_ROOT'. 
     03 filler pic x(20) value 'GATEWAY_INTERFACE'. 
     03 filler pic x(20) value 'HTTP_ACCEPT'. 
     03 filler pic x(20) value 'HTTP_ACCEPT_CHARSET'. 
     03 filler pic x(20) value 'HTTP_ACCEPT_ENCODING'. 
     03 filler pic x(20) value 'HTTP_ACCEPT_LANGUAGE'. 
     03 filler pic x(20) value 'HTTP_COOKIE'. 
     03 filler pic x(20) value 'HTTP_CONNECTION'. 
     03 filler pic x(20) value 'HTTP_HOST'. 
     03 filler pic x(20) value 'HTTP_REFERER'. 
     03 filler pic x(20) value 'HTTP_USER_AGENT'. 
     03 filler pic x(20) value 'LIB_PATH'. 
     03 filler pic x(20) value 'PATH'. 
     03 filler pic x(20) value 'PATH_INFO'. 
     03 filler pic x(20) value 'PATH_TRANSLATED'. 
     03 filler pic x(20) value 'QUERY_STRING'. 
     03 filler pic x(20) value 'REMOTE_ADDR'. 
     03 filler pic x(20) value 'REMOTE_HOST'. 
     03 filler pic x(20) value 'REMOTE_IDENT'. 
     03 filler pic x(20) value 'REMOTE_PORT'. 
     03 filler pic x(20) value 'REQUEST_METHOD'. 
     03 filler pic x(20) value 'REQUEST_URI'. 
     03 filler pic x(20) value 'SCRIPT_FILENAME'. 
     03 filler pic x(20) value 'SCRIPT_NAME'. 
     03 filler pic x(20) value 'SERVER_ADDR'. 
     03 filler pic x(20) value 'SERVER_ADMIN'. 
     03 filler pic x(20) value 'SERVER_NAME'. 
     03 filler pic x(20) value 'SERVER_PORT'. 
     03 filler pic x(20) value 'SERVER_PROTOCOL'. 
     03 filler pic x(20) value 'SERVER_SIGNATURE'. 
     03 filler pic x(20) value 'SERVER_SOFTWARE'. 
     02 filler redefines name-strings. 
     03 name-string pic x(20) occurs name-count times. 

    procedure division. 

    * Always send out the Content-type before any other IO 
    display 
     "Content-type: text/html" 
     newline 
    end-display. 

    display 
     "<html><body>" 
    end-display. 
    display 
     "<h3>CGI environment with OpenCOBOL</h3>" 
    end-display. 
    display 
     '<a href="/cgienvform.html">To cgienvform.html</a>' 
     "<p><table>" 
    end-display. 

    * Accept and display some of the known CGI environment values 
    perform varying name-index from 1 by 1 
     until name-index > name-count 
      accept value-string from environment 
       name-string(name-index) 
      end-accept 
      display 
       "<tr><td>" 
       name-string(name-index) 
       ": </td><td>" 
       function trim (value-string trailing) 
       "</td></tr>" 
      end-display 
      if (name-string(name-index) = "REQUEST_METHOD") 
       and (value-string = "POST") 
        open input webinput 
        read webinput 
         at end move spaces to postchunk 
        end-read 
        close webinput 
        display 
         '<tr><td align="right">' 
         "First chunk of POST:</td><td>" 
         postchunk(1:72) 
         "</td></tr>" 
        end-display 
      end-if 
    end-perform. 
    display "</table></p></body></html>" end-display. 
    goback. 

Ed ecco un modulo che aggiunge un po 'di AJAX al mix.

<html> 
<head> 
<title>Simple Ajax Example</title> 
<script language="Javascript"> 
function xmlhttpPost(strURL) { 
    var xmlHttpReq = false; 
    var self = this; 
    // Mozilla/Safari 
    if (window.XMLHttpRequest) { 
     self.xmlHttpReq = new XMLHttpRequest(); 
    } 
    // IE 
    else if (window.ActiveXObject) { 
     self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    self.xmlHttpReq.open('POST', strURL, true); 
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    self.xmlHttpReq.onreadystatechange = function() { 
     if (self.xmlHttpReq.readyState == 4) { 
      updatepage(self.xmlHttpReq.responseText); 
     } 
    } 
    self.xmlHttpReq.send(getquerystring()); 
} 

function getquerystring() { 
    var form  = document.forms['f1']; 
    var word = form.word.value; 
    qstr = 'w=' + escape(word); // NOTE: no '?' before querystring 
    return qstr; 
} 

function updatepage(str){ 
    document.getElementById("result").innerHTML = str; 
} 
</script> 
</head> 
<body> 
<form name="f1"> 
    <p>word: <input name="word" type="text"> 
    <input value="Go" type="button" onclick='javascript:xmlhttpPost("/cgi-bin/cgienv.cgi")'></p> 
    <div id="result"></div> 
</form> 
</body> 
</html> 

E proprio l'aggiunta, quando ho provato questo per il FAQ OpenCOBOL è stato con un browser WebKit incorporato in COBOL, sfruttando le associazioni Vala WebKit. Funziona il fascino. COBOL controlla il browser che elabora il CGI.

Problemi correlati