2010-03-29 19 views
17

estoy empleado en una empresa bastante grande aquí en Alemania y dieron el trabajo para crear el sitio web principal para ello que contará con:Cobol web de desarrollo/recursos de alojamiento

  • contenido estático; Información y Presentaciones
  • Un área de los empleados (alrededor de 6000 empleados) que ofrecen las diversas cosas de calendarios, descripciones de trabajo, algún tipo de grupos
  • también muchas otras cosas dinámicas que no pueden enumerar aquí

yo hemos decidido utilizar COBOL para el trabajo, puede estar muy subestimado, pero es un lenguaje muy potente, especialmente para aplicaciones comerciales y, como también dicen mis compañeros, desarrollo web (2.0).

También necesito usar COBOL porque todo el sistema de back-end y transacciones de la compañía está programado en él (algunas partes pequeñas también fueron programadas en LISP, no sé exactamente por qué). También recibí una API que hace posible usar COBOL con MySQL fácilmente.

Este es un proyecto grande y probablemente llevará más de 2 meses programarlo.

  • ¿Qué debo esperar al crear una gran aplicación web en COBOL?
  • ¿Hay marcos web disponibles para COBOL? ¿Algún tipo de MVC?
  • ¿Existen buenos recursos para el desarrollo web práctico con COBOL?

Gracias de antemano

+1

¿Es la plataforma una IBM i-series, también llamada AS/400? –

+0

Pete Duncanson: Esta no es una pregunta de broma, tengo que usar COBOL para este proyecto y escuché que no es tan malo como todos dicen. S.Lott: No, utilizarán OpenCobol para compilar el proyecto y luego vincularlo a CGI, no estoy tan familiarizado con este proceso, aunque este es solo el comienzo del proyecto. Lo siento por mi mal inglés, también, alemán, ya sabes. – felixm

Respuesta

16

¿Qué debo esperar al construir una gran aplicación web en COBOL?

Tardará mucho tiempo. Los marcos como Django, Ruby on Rails o CodeIgniter están diseñados específicamente para crear sitios web en muy poco tiempo.

La mayoría de estos marcos pueden crear sitios web dinámicos de trabajo en 20 minutos. COBOL no puede. A menos que pueda escribir muy rápido, probablemente tenga muy poco código viable en el tiempo que pueda aprender y construir un sitio con cualquier herramienta más moderna.

¿Existen marcos web para COBOL disponibles? ¿Algún tipo de MVC?

Hacer esta pregunta ahora indica que la elección del uso de COBOL es una muy mala idea.

La estrategia habitual es elegir primero el marco. Después de hacer la elección de marco, soportamos el lenguaje requerido para aprovechar ese marco.

Sin embargo, siempre hay http://www.coboloncogs.org/HOME.HTM

¿Hay buenos recursos para práctica de desarrollo web con COBOL?

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

desarrollo web práctica se realiza con los marcos en la web específica. Cualquiera de las docenas de frameworks web de Python, Ruby on Rails, cualquiera de los frameworks de PHP, cualquiera de los frameworks de Java. Están altamente especializados para construir sitios web de forma rápida y económica.

COBOL no está muy especializado para esto. Tampoco (aparte de la i-Series) alguien considera seriamente COBOL para el desarrollo web.

Su mejor esperanza sería utilizar tantas bibliotecas externas como sea posible y escribir la menor COOL posible. Debe hacer un uso intensivo de las características de COBOL a C de OpenCOBOL para trabajar con la API de C-language y, de hecho, crear su sitio en C con un contenedor COBOL.

+6

Como programador COBOL de "núcleo duro" a tiempo completo y desarrollador web "a tiempo reducido", tengo que estar de acuerdo con S.Lott. ¡No use COBOL para el desarrollo web front-end! Realmente va a doler! Por otro lado, aprovechar sus sistemas COBOL para proporcionar soporte de back-end para aplicaciones web puede ser una opción razonable. – NealB

+0

@NealB: mucha gente hace precisamente eso: la interfaz web inicia el procesamiento de back-end a través de los programas COBOL. –

+0

Como dijo NealB, use COBOL para interactuar con los sistemas back-end existentes. El elemento web es muy diferente del tipo de aplicaciones para las que se creó COBOL. Considere interactuar con los servidores web, usar HTTP, manejar datos sin formato, generar HTML y JSON. Tomará mucho tiempo hacer que COBOL haga cosas que otros sistemas admiten de forma nativa. Vaya por un marco web, cree una capa de servicio basada en REST o SOAP que exponga las funciones de los sistemas existentes y use COBOL para implementar esos servicios. – Kwebble

9

Por favor, por favor, por favor no utilizan COBOL para esto. Cualquiera que tenga que apoyar el sitio en el futuro le agradecerá por elegir una herramienta más ... moderna.

Recomiendo que utilice un marco web para escribir el front-end, como PHP, ASP.NET MVC, etc. Luego, cree una API (o un proceso separado con algún tipo de interfaz, si es necesario) que permitirá que esa herramienta hable con su back-end de COBOL. Esto le permitirá usar el marco web en la parte delantera, donde brillará, mientras le permite aprovechar la inversión significativa de su empresa en COBOL.

+0

Tengo que usar COBOL, como dije. – felixm

+5

@felixm: "He decidido usar COBOL" suena como si tomases una mala decisión. "Tengo que usar COBOL" suena como si alguien más tomara una mala decisión. ¿Quién, específicamente, está tomando esta mala decisión? ¿Por qué estás obligado a usar COBOL? ¿Quién te está obligando? –

+2

Pensé que habías decidido usarlo? De todos modos, te recomiendo que uses un framework web para escribir el front-end, como PHP, ASP.NET MVC, etc. Luego crea una API (o un proceso separado con algún tipo de interfaz, si es necesario) que te permita esa herramienta para hablar con tu back-end de COBOL. Esto le permitirá usar el marco web en la parte delantera, donde brillará, mientras le permite aprovechar la inversión significativa de su empresa en COBOL. –

1

Microfocus proporcionan un producto llamado Enterprise Server que permite a COBOL interactuar con servicios web.

Si tiene un programa COBOL A y otro programa COBOL B y A llama a través de la sección de interfaz, la herramienta le permite exponer la sección de interfaz de B como un servicio web.

Para el programa A, a continuación, genera un proxy de cliente y A ahora puede llamar a B a través de un servicio web.

Por supuesto, como B ahora tiene un servicio web, cualquier otro tipo de programa (línea de comando, aplicación de Windows, Java, ASP, etc.) ahora también lo puede llamar.

También tienen otro producto "COBOL.Net" que proporciona un intérprete a .NET IL para programas COBOL.

Debido a que este es en la plataforma .NET, se puede mezclar y combinar con C#, etc.

Esto le permite lo mejor de ambos mundos. Usted conserva el back-end actual de COBOL, pero puede desarrollar la aplicación web con herramientas modernas, p. ASP/MVC/Struts/JSP. Y encadenas los dos junto con un servicio web.

+0

Según los comentarios realizados por el póster original, parece que están utilizando OpenCOBOL, que básicamente es un traductor de COBOL a C. Tal vez tengan la intención de aprovechar esta "característica" para salir del cuadro COBOL. – NealB

1

Si TIENE que usar Cobol porque necesita integrarse con algunas API antiguas de COBOL, qué tal si usa Cobol para exponer los datos a través de alguna API RESTful (o similar). Luego escribe tu aplicación web en algo moderno como Django (que es muy bueno). La aplicación web Python podría acceder fácilmente a los datos necesarios a través de la API RESTful que está proporcionando en Cobol.

Eso le permitiría utilizar la herramienta adecuada para cada trabajo: un marco de aplicación web moderno para la aplicación web y algún código Cobol para exponer datos para los que solo tiene una API de Cobol.

4

La reacción inicial que la mayoría de la gente tiene para desarrollar una aplicación web en COBOL es muy negativa.

En general, estoy de acuerdo, y no recomienda el uso de COBOL para el desarrollo web front-end simplemente porque hay otras herramientas que vienen con una gran cantidad de apoyo pre-envasados ​​para la construcción de este tipo de aplicación. El soporte generalmente viene a través de los complementos de la biblioteca y las interfaces preconstruidas para los servicios web. El lenguaje de implementación en sí mismo es menos importante.

Como un ejemplo, Ruby on Rails es un marco de aplicación basado en el modelo MVC que usa Ruby (lenguaje) para "pegar" todo junto. Un poco de su esfuerzo de desarrollo se evapora , siempre y cuando se adhiera a la infraestructura de Rails. Sin embargo, rompa el marco y podría romperlo. Veo el uso de frameworks como Ruby on Rails , ideal para nuevos desarrollos donde controlas todo desde cero.

Su situación puede ser algo diferente. Si lo he entendido correctamente, tiene una base de aplicaciones COBOL y una base de datos mySQL que necesita integrarse en , una nueva aplicación web. El marco de Rails puede o no ser particularmente útil en este contexto. Todo depende de cómo "te encuentras en el medio". Es una práctica de la industria bastante común utilizar herramientas sólidas habilitadas para web para aplicaciones web front-end con back-ends basados ​​en COBOL. Hacer que los dos se unan es una forma bastante específica de la plataforma art formulario.

Los mismos comentarios se aplican a cualquier otro marco de trabajo y conjunto de herramientas de la aplicación web. Simplemente, usé Ruby on Rails como ejemplo. La conclusión es que no mucha gente (yo entre ellos) ha pensado mucho en abrir una aplicación web usando COBOL.

No obstante lo anterior, me di cuenta de que está utilizando openCobol en su tienda. Esto podría hacer que construir una solución única de COBOL sea una perspectiva razonable. A diferencia de muchas implementaciones COBOL, openCobol viene "listo para web" y tiene database independent abstract layer por lo que llegar a su base de datos mySQL debería ser bastante sencillo. La disponibilidad de la Web es en parte consecuencia de openCobol que usa la C Application Binary Interface (ABI). El C ABI debería facilitar en gran medida el trabajo en un entorno de lenguaje mixto y hace que interactuar con un CGI (Common Gateway Interface) bastante sea muy trivial; como se puede ver en este example.

OpenCobol hace posible la construcción de una aplicación web, pero ¿es práctico? Como se mencionó anteriormente, , a menos que exista un marco de aplicación web documentado para utilizar, usted terminará haciendo mucho de eso usted mismo. Creo que ya ha llegado a esta conclusión al publicar su pregunta. Por lo que puedo decir, desarrollar dicho marco también es factible pero aún no existe. Si continúa con este proyecto, quizás pueda contribuir al desarrollo de un marco de aplicación web para openCobol.

Encontré la referencia "Cobol on Cogs" en la respuesta aceptada un poco injusta, usted hizo una pregunta seria y mereció una respuesta completamente seria.Este tipo de referencia probablemente refleja un bit de mentalidad cerrada de "cuello rojo" hacia COBOL (Sí, estoy listo y esperando votos a la baja en este caso).

5

Después de publicar la muestra de OpenCOBOL para CGI y AJAX, me gustaría agregar, ir por ello. COBOL puede hacer frente.

>>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. 

Y aquí hay un formulario que agrega un poco de AJAX a la mezcla.

<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> 

Y sólo añadir, cuando probé esto para el FAQ OpenCOBOL fue con un navegador WebKit incrustado en COBOL, el aprovechamiento de los enlaces Vala WebKit. Funciona el encanto. COBOL controla el navegador que procesa el CGI.