2010-03-29 35 views
17

Tôi đang làm việc tại một công ty khá lớn ở đây ở Đức và nhận được công việc để tạo ra các trang web chính của nó mà sẽ bao gồm:Cobol web phát triển/hosting nguồn

  • nội dung tĩnh; Thông tin và trình bày
  • Một khu vực nhân viên (khoảng 6.000 nhân viên) có tính năng điều khác nhau từ lịch, mô tả công việc, một số loại nhóm
  • Quá nhiều điều động khác mà tôi không thể liệt kê ở đây

tôi đã quyết định để sử dụng COBOL cho công việc, nó có thể rất bị đánh giá thấp nhưng nó là một ngôn ngữ rất mạnh mẽ, đặc biệt là cho các ứng dụng kinh doanh và, như đồng nghiệp của tôi nói, phát triển web (2.0).

Tôi cũng cần sử dụng COBOL vì tất cả hệ thống phụ trợ và giao dịch của công ty được lập trình trong đó (một số phần nhỏ được lập trình trong LISP, tôi không biết chính xác lý do). Tôi cũng đã nhận được một API mà làm cho nó có thể sử dụng COBOL với MySQL một cách dễ dàng.

Đây là một dự án lớn và có thể sẽ mất hơn 2 tháng để lập trình.

  • Tôi phải mong đợi điều gì khi xây dựng một ứng dụng web lớn trong COBOL?
  • Có các khung công tác web cho COBOL có sẵn không? Một số loại MVC?
  • Có tài nguyên nào tốt để phát triển web thực tế với COBOL không?

Cảm ơn trước

+1

Nền tảng có phải là i-series của IBM hay còn gọi là AS/400 không? –

+0

Pete Duncanson: Đây không phải là một câu hỏi đùa, tôi phải sử dụng COBOL cho dự án này và tôi nghe nói nó không tệ như mọi người nói. S.Lott: Không, họ sẽ sử dụng OpenCobol để biên dịch dự án và sau đó liên kết nó với CGI, tôi không quá quen thuộc với quá trình này, mặc dù đây chỉ là khởi đầu của dự án. Xin lỗi vì tiếng Anh xấu của tôi nữa, tiếng Đức, bạn biết đấy. – felixm

Trả lời

16

Tôi phải mong đợi điều gì khi xây dựng một ứng dụng web lớn trong COBOL?

Sẽ mất nhiều thời gian. Các khung như Django, Ruby on Rails hoặc CodeIgniter được thiết kế đặc biệt để tạo ra các trang web trong thời gian rất ít.

Hầu hết các khung công tác này đều có thể xây dựng các trang web nội dung động đang hoạt động sau 20 phút. COBOL không thể. Trừ khi bạn có thể gõ thực sự nhanh chóng, có thể bạn sẽ có rất ít mã khả thi trong thời gian bạn có thể tìm hiểu và xây dựng một trang web với bất kỳ công cụ hiện đại hơn.

Có khung web cho COBOL có sẵn không? Một số loại MVC?

Đặt câu hỏi này ngay bây giờ cho biết rằng lựa chọn sử dụng COBOL thực sự là một ý tưởng tồi.

Chiến lược thông thường là chọn khung trước tiên. Sau khi thực hiện lựa chọn khung, chúng tôi chịu đựng ngôn ngữ cần thiết để tận dụng khung công tác đó.

Tuy nhiên, luôn có http://www.coboloncogs.org/HOME.HTM

Có bất kỳ nguồn lực tốt cho thực tiễn phát triển web với COBOL?

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

phát triển web thực tế được thực hiện với các khuôn khổ web cụ thể. Bất kỳ hàng tá khung công tác web Python, Ruby on Rails, bất kỳ khung công tác PHP nào, bất kỳ khung công tác Java nào. Họ rất chuyên môn để xây dựng các trang web một cách nhanh chóng và rẻ tiền.

COBOL không có tính chuyên môn cao cho việc này. Cũng không phải (bên ngoài i-Series) có ai nghiêm túc xem xét COBOL để phát triển web.

Hy vọng tốt nhất của bạn là sử dụng càng nhiều thư viện bên ngoài càng tốt và viết càng ít COBOL càng tốt. Bạn phải sử dụng nhiều tính năng COBOL đến C của OpenCOBOL để làm việc với API của ngôn ngữ C và - có hiệu lực - xây dựng trang web của bạn bằng C với trình bao bọc COBOL.

+6

Là một lập trình viên COBOL toàn thời gian "lõi cứng" và nhà phát triển web "thời gian nhỏ", tôi phải đồng ý với S.Lott. Không sử dụng COBOL để phát triển web kết thúc trước! Nó thực sự sẽ làm tổn thương! Mặt khác, tận dụng các hệ thống COBOL của bạn để cung cấp hỗ trợ kết thúc cho các ứng dụng điều khiển web có thể là một lựa chọn hợp lý. – NealB

+0

@NealB: Nhiều người làm chính xác điều đó - Web front-end bắt đầu xử lý back-end thông qua các chương trình COBOL. –

+0

Giống như NealB đã nói, hãy sử dụng COBOL để giao tiếp với các hệ thống đầu cuối hiện có. Phần web rất khác với loại ứng dụng COBOL được tạo ra. Hãy suy nghĩ về giao tiếp với máy chủ web, sử dụng HTTP, xử lý dữ liệu biểu mẫu thô, tạo HTML và JSON. Nó sẽ mất rất nhiều thời gian làm cho COBOL làm những điều mà các hệ thống khác hỗ trợ nguyên bản. Đi cho một khuôn khổ web, tạo ra một lớp dịch vụ dựa trên REST hoặc SOAP để lộ các hàm từ các hệ thống hiện có và sử dụng COBOL để thực hiện các dịch vụ đó. – Kwebble

9

Xin vui lòng, xin vui lòng, xin vui lòng không sử dụng COBOL cho việc này. Bất cứ ai có hỗ trợ trang web trong tương lai sẽ cảm ơn bạn đã chọn một công cụ hiện đại hơn ....

Tôi khuyên bạn nên sử dụng khung web để viết giao diện người dùng, chẳng hạn như PHP, ASP.NET MVC, v.v. Sau đó, tạo một API (hoặc một quy trình riêng biệt với một số loại giao diện, nếu được yêu cầu) sẽ cho phép công cụ đó nói chuyện với back-end COBOL của bạn. Điều này sẽ cho phép bạn sử dụng khung web ở mặt trước - nơi nó sẽ tỏa sáng - trong khi cho phép bạn tận dụng đầu tư đáng kể của công ty bạn trong COBOL.

+0

Tôi phải sử dụng COBOL, như đã nói. – felixm

+5

@felixm: "Tôi đã quyết định sử dụng COBOL" có vẻ như bạn đang đưa ra quyết định không tốt. "Tôi phải sử dụng COBOL" âm thanh như một người khác đưa ra quyết định tồi tệ. Ai - cụ thể - đang đưa ra quyết định tồi tệ này? Tại sao bạn buộc phải sử dụng COBOL? Ai là người hấp dẫn bạn? –

+2

Tôi nghĩ bạn đã quyết định sử dụng nó? Dù sao, tôi khuyên bạn nên sử dụng một khuôn khổ web để viết front-end, chẳng hạn như PHP, ASP.NET MVC, vv. Sau đó tạo một API (hoặc một quá trình riêng biệt với một số loại giao diện, nếu được yêu cầu) sẽ cho phép công cụ đó để nói chuyện với back-end COBOL của bạn. Điều này sẽ cho phép bạn sử dụng khung web ở mặt trước - nơi nó sẽ tỏa sáng - trong khi cho phép bạn tận dụng đầu tư đáng kể của công ty bạn trong COBOL. –

1

Microfocus cung cấp sản phẩm có tên Enterprise Server cho phép COBOL tương tác với dịch vụ web.

Nếu bạn có chương trình COBOL A và một chương trình COBOL B và A khác gọi B qua phần giao diện, công cụ này cho phép bạn hiển thị phần giao diện của B làm dịch vụ web.

Đối với chương trình A, sau đó bạn tạo proxy máy khách và A bây giờ có thể gọi B qua dịch vụ web.

Tất nhiên, vì giờ đây B có dịch vụ web bất kỳ loại chương trình nào khác (dòng lệnh, ứng dụng Windows, Java, ASP, v.v.) hiện có thể gọi nó.

Họ cũng có một sản phẩm khác "COBOL.Net" cung cấp thông dịch viên cho .NET IL cho các chương trình COBOL.

Bởi vì đây là trên nền tảng .NET, bạn có thể trộn và trận đấu với C#, vv

này cho phép bạn tốt nhất của cả hai thế giới. Bạn giữ back-end COBOL hiện tại nhưng có thể phát triển ứng dụng web bằng các công cụ hiện đại, ví dụ: ASP/MVC/Struts/JSP. Và bạn kết nối cả hai với một dịch vụ web.

+0

Dựa trên các ý kiến ​​được tạo bởi poster gốc, có vẻ như họ đang sử dụng OpenCOBOL về cơ bản là trình biên dịch COBOL thành C. Có lẽ họ có ý định tận dụng "tính năng" này để thoát khỏi hộp COBOL. – NealB

1

Nếu bạn CÓ sử dụng Cobol vì bạn cần tích hợp với một số API COBOL cũ, bạn sử dụng Cobol như thế nào để hiển thị dữ liệu qua một số API RESTful (hoặc tương tự). Sau đó viết ứng dụng web của bạn trong một cái gì đó hiện đại như Django (rất đẹp). Ứng dụng web Python sau đó có thể dễ dàng truy cập dữ liệu cần thiết thông qua API RESTful mà bạn đang cung cấp trong Cobol.

Điều đó sẽ cho phép bạn sử dụng đúng công cụ cho từng công việc: Khung ứng dụng web hiện đại cho ứng dụng web và một số mã Cobol để hiển thị dữ liệu mà bạn chỉ có API Cobol.

4

Phản ứng ban đầu mà hầu hết mọi người phải phát triển ứng dụng web trong COBOL rất tiêu cực!

Nói chung, tôi đồng ý và khuyên bạn không nên sử dụng COBOL để phát triển web trước chỉ đơn giản là vì có các công cụ khác đi kèm với rất nhiều hỗ trợ được đóng gói sẵn để tạo loại ứng dụng này. Hỗ trợ thường đi qua thư viện tiện ích và giao diện được tạo sẵn cho các dịch vụ web. Bản thân ngôn ngữ thực hiện không kém phần quan trọng.

Ví dụ, Ruby on Rails là một khung ứng dụng dựa trên mô hình MVC sử dụng Ruby (ngôn ngữ) để "dán" tất cả lại với nhau. Một chút công bằng của nỗ lực phát triển của bạn sẽ bay hơi miễn là bạn tuân theo khung Rails. Tuy nhiên, phá vỡ khuôn khổ và nó có thể rất tốt phá vỡ bạn. Tôi thấy việc sử dụng các framework như Ruby on Rails lý tưởng cho sự phát triển mới, nơi bạn kiểm soát mọi thứ từ đầu.

Tình huống của bạn có thể hơi khác. Nếu tôi đã hiểu chính xác, bạn có cơ sở của các ứng dụng COBOL và cơ sở dữ liệu mySQL cần được tích hợp vào một ứng dụng web mới. Khung Rails có thể hoặc có thể không đặc biệt là hữu ích trong ngữ cảnh này. Tất cả phụ thuộc vào cách bạn "gặp nhau ở giữa". Đó là thực tiễn ngành công nghiệp khá phổ biến để sử dụng các công cụ hỗ trợ web mạnh mẽ cho front2 end các ứng dụng web có kết thúc dựa trên COBOL. Làm cho hai người đến với nhau là một hình thức nghệ thuật cụ thể theo nền tảng.

Các nhận xét tương tự áp dụng cho mọi khung công cụ và ứng dụng web khác. Tôi chỉ cần sử dụng Ruby on Rails làm ví dụ. Điểm mấu chốt là không có nhiều người (tôi trong số họ) đã đưa ra nhiều suy nghĩ để đi trước một ứng dụng web bằng cách sử dụng COBOL.

Không chịu đựng những điều trên, tôi nhận thấy rằng bạn đang sử dụng openCobol trong cửa hàng của mình. Điều này có thể làm cho tòa nhà một giải pháp COBOL duy nhất là một khách hàng tiềm năng hợp lý. Không giống như nhiều triển khai COBOL, openCobol có "web sẵn sàng" và có một số database independent abstract layer do đó, việc truy cập vào cơ sở dữ liệu mySQL của bạn sẽ không gây đau đớn. Tính sẵn sàng của web một phần là hậu quả của openCobol bằng cách sử dụng Giao diện nhị phân ứng dụng (01IC). C ABI sẽ tạo điều kiện thuận lợi cho việc làm việc trong một môi trường ngôn ngữ hỗn hợp và làm cho tương tác với một CGI (Giao diện cổng chung) khá nhiều tầm thường; như có thể thấy trong số này example.

OpenCobol giúp xây dựng một ứng dụng web khả thi, nhưng thực tế có phải không? Như đã nói ở trên, trừ khi có một khung ứng dụng web được lập tài liệu để vẽ, bạn sẽ tự mình làm rất nhiều. Tôi nghĩ bạn có thể đã đi đến kết luận này khi đăng câu hỏi của bạn. Theo như tôi có thể nói, việc phát triển một khung như vậy cũng khả thi nhưng chưa tồn tại. Nếu bạn tiếp tục với dự án này, có thể bạn có thể đóng góp vào việc phát triển một khung ứng dụng web cho openCobol.

Tôi đã tìm thấy tham chiếu "Cobol on Cogs" trong câu trả lời được chấp nhận một chút không công bằng, bạn đã hỏi một câu hỏi nghiêm trọng và xứng đáng là câu trả lời hoàn toàn nghiêm trọng.Loại tài liệu tham khảo này có thể phản ánh một chút của "đỏ ​​cổ" đóng cửa mindedness đối với COBOL (Có, tôi đã sẵn sàng cho và mong đợi xuống phiếu trên này).

5

Sau khi đã đăng mẫu OpenCOBOL cho CGI và AJAX, tôi muốn thêm, hãy thực hiện. COBOL có thể làm giao diện người dùng.

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

Và đây là biểu mẫu thêm AJAX nhỏ vào danh sách kết hợp.

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

Và chỉ cần thêm, khi tôi thử nghiệm này cho FAQ OpenCOBOL nó đã được với một trình duyệt WebKit nhúng trong COBOL, tận dụng các ràng buộc Vala WebKit. Làm việc quyến rũ. COBOL kiểm soát trình duyệt xử lý CGI.

Các vấn đề liên quan