tutorial - Cobol desarrollo web/recursos de alojamiento
cobol ventajas y desventajas (6)
Estoy empleado en una empresa bastante grande aquí en Alemania y conseguí el trabajo para crear el sitio web principal que contará con:
- Contenidos estáticos; Información y Presentaciones
- Un área de empleados (alrededor de 6000 empleados) que incluye varias cosas de calendarios, descripciones de puestos, algún tipo de grupos
- Demasiadas otras cosas dinámicas que no puedo enumerar aquí
Decidí usar COBOL para el trabajo, puede ser muy subestimado, pero es un lenguaje muy poderoso, especialmente para aplicaciones de negocios y, como dicen mis compañeros de trabajo, el desarrollo web (2.0) también.
También necesito usar COBOL porque todo el backend y el sistema de transacciones de la compañía están programados 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 gran proyecto y probablemente tomará más de 2 meses programarlo.
- ¿Qué debo esperar al crear una gran aplicación web en COBOL?
- ¿Hay marcos web para COBOL disponibles? ¿Algún tipo de MVC?
- ¿Existen buenos recursos para el desarrollo web práctico con COBOL?
Gracias por adelantado
¿Qué debo esperar al crear una gran aplicación web en COBOL?
Tomará un largo tiempo. Frameworks 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 de contenido dinámico en 20 minutos. COBOL no puede. A menos que pueda escribir muy rápido, probablemente tendrá muy poco código viable en el tiempo que podría aprender y construir un sitio con cualquier herramienta más moderna.
¿Hay marcos web para COBOL disponibles? ¿Algún tipo de MVC?
Hacer esta pregunta ahora indica que la elección de usar COBOL es una muy, muy mala idea.
La estrategia habitual es elegir el marco primero. Después de hacer la elección del marco, soportamos el lenguaje requerido para aprovechar ese marco.
Sin embargo, siempre hay http://www.coboloncogs.org/HOME.HTM
¿Existen buenos recursos para el desarrollo web práctico con COBOL?
El desarrollo web práctico se realiza con marcos web específicos. Cualquiera de las docenas de marcos web de Python, Ruby on Rails, cualquiera de los marcos de PHP, cualquiera de los marcos de Java. Están altamente especializados para crear sitios web de forma rápida y económica.
COBOL no está altamente especializado para esto. Tampoco (fuera de la serie i) alguien considera seriamente COBOL para el desarrollo web.
Su mejor esperanza sería utilizar tantas bibliotecas externas como sea posible y escribir el menor COBOL posible. Tiene que hacer un uso intensivo de las funciones COBOL a C de OpenCOBOL para trabajar con las API de lenguaje C y, de hecho, construir su sitio en C con un contenedor COBOL.
¡La reacción inicial que la mayoría de la gente tiene al desarrollar una aplicación web en COBOL es muy negativa!
En general, estoy de acuerdo, y recomiendo no usar COBOL para el desarrollo web front-end simplemente porque hay otras herramientas que vienen con una gran cantidad de soporte pre-empaquetado para construir este tipo de aplicación. Por lo general, el soporte viene a través de complementos de biblioteca e interfaces preconstruidas para servicios web. El lenguaje de implementación en sí es menos importante.
Como un ejemplo, Ruby on Rails es un marco de aplicación basado en el modelo MVC que utiliza Ruby (lenguaje) para "pegarlo" todo junto. Una buena parte de su esfuerzo de desarrollo se evapora, siempre y cuando se adhiera al marco Rails. Sin embargo, rompa el marco y podría muy bien romperlo. Veo usar marcos como Ruby on Rails ideales para un nuevo desarrollo 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 deben 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 "reúnas en el medio". Es una práctica bastante común en la industria el uso de herramientas sólidas habilitadas para la web para aplicaciones web front-end con back-end basados en COBOL. Hacer que los dos se unan es una forma de arte bastante específica de plataforma.
Los mismos comentarios se aplican a cualquier otro marco de aplicación web y conjunto de herramientas. Acabo de usar Ruby on Rails como ejemplo. La conclusión es que no muchas personas (yo entre ellas) han pensado mucho en lanzar una aplicación web utilizando COBOL.
No obstante lo anterior, noté que está usando openCobol en su tienda. Esto podría hacer que la construcción de una única solución COBOL sea una perspectiva razonable. A diferencia de muchas implementaciones de COBOL, openCobol viene "listo para la web" y tiene una capa abstracta independiente de la base de datos, por lo que acceder a su base de datos mySQL debería ser bastante sencillo. La preparación web es, en parte, una consecuencia de que openCobol utilice la interfaz binaria de aplicaciones C (ABI). C ABI debería facilitar enormemente el trabajo en un entorno de lenguaje mixto y hace que la interacción con un CGI (Common Gateway Interface) sea bastante trivial; Como se puede ver en este example .
OpenCobol hace que construir una aplicación web sea factible, pero ¿es práctico? Como se mencionó anteriormente, a menos que haya un marco de aplicación web documentado en el lugar en el que se basará, usted terminará haciéndolo usted mismo. Creo que es posible que ya hayas llegado a esta conclusión al publicar tu pregunta. Por lo que puedo decir, desarrollar un marco de este tipo también es factible pero aún no existe. Si sigue adelante con este proyecto, tal vez podría contribuir al desarrollo de un marco de aplicación web para openCobol.
Encontré que la referencia "Cobol en Cogs" en la respuesta aceptada es un poco injusta, hizo una pregunta seria y mereció una respuesta completamente seria. Este tipo de referencia probablemente refleja un poco de mentalidad cerrada "de cuello rojo" hacia COBOL (Sí, estoy listo para y esperando votos en este caso).
Después de haber publicado la muestra de OpenCOBOL para CGI y AJAX, solo me gustaría agregar, adelante. COBOL puede hacer frontends.
>>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 una forma 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 simplemente agregando, cuando probé esto para las preguntas frecuentes de OpenCOBOL, fue con un navegador WebKit integrado en COBOL, aprovechando los enlaces de Vala WebKit. Trabaja el encanto. COBOL controlando el navegador que procesa el CGI.
Por favor, por favor, por favor no use COBOL para esto. Cualquier persona que tenga que apoyar el sitio en el futuro le agradecerá por elegir una herramienta más ... moderna.
Le recomiendo que use 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 permita esa herramienta para hablar con su back-end COBOL. Esto le permitirá utilizar el marco web en la parte delantera, donde brillará, a la vez que le permitirá aprovechar la importante inversión de su empresa en COBOL.
Si TIENE QUE usar Cobol porque necesita integrarse con algunas API COBOL heredadas, ¿qué le parece usar 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 de 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 usar la herramienta adecuada para cada trabajo: un marco de aplicación web moderno para la aplicación web y un código Cobol para exponer datos a los que solo tiene una API de Cobol.
Microfocus proporciona un producto llamado Enterprise Server que permite a COBOL interactuar con los servicios web.
Si tiene un programa COBOL A y otro programa COBOL B y A llama B 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, luego genera un proxy de cliente y A ahora puede llamar a B a través de un servicio web.
Por supuesto, dado que B ahora tiene un servicio web, cualquier otro tipo de programa (línea de comandos, aplicación de Windows, Java, ASP, etc.) también puede llamarlo.
También tienen otro producto "COBOL.Net" que proporciona un intérprete a .NET IL para los programas COBOL.
Debido a que esto está en la plataforma .NET, puede mezclar y combinar con C #, etc.
Esto te permite lo mejor de ambos mundos. Usted mantiene el back-end COBOL existente pero puede desarrollar la aplicación web con herramientas modernas, por ejemplo, ASP / MVC / Struts / JSP. Y los encadenas con un servicio web.