Миграция RPG на Java на IBM iSeries

Наша компания использует IBM iSeries для большей части обработки данных. Все наши внутренние приложения написаны в RPG. Согласно дорожной карте IBM, IBM подталкивает компании к переходу на Java/J2EE. Мы стремимся модернизировать наши внутренние приложения, сделав их интерфейс более графическим. Мы обеспечиваем внешнее веб-присутствие с помощью веб-сайтов Asp.Net, хотя, возможно, новые проекты могут быть реализованы на Java. Один из вариантов — использовать приложение для очистки экрана, оставаясь при этом на RPG, но я думаю, что может быть лучше медленно идти по пути IBM и переходить на Java. Наша цель — перейти на интерфейс с графическим интерфейсом и соответствовать планам IBM.

Участвовали ли вы в миграции RPG на Java, даже если только новые проекты были Java, а старые проекты оставались RPG?

Мое руководство опасается, что:

1) обновление JRE на рабочих станциях, особенно на тонких клиентах, может вызвать административный кошмар (наша компания использует 80% тонких клиентов и 20% ПК) и

2) Java требует слишком больших накладных расходов на рабочую станцию ​​для эффективной работы.

3) Несовместимость между клиентами JRE при обновлении, что может нарушить работу других приложений, требующих JRE.

Можете ли вы пролить свет на это? Есть ли огромные преимущества? Любые огромные ошибки?

ПОЯСНЕНИЕ: меня интересует только переход на Java. Каков уровень сложности и не потеряю ли я что-нибудь при переходе с RPG на Java? Экраны очень быстро реагируют при переходе на Java?


person Bill Martin    schedule 21.11.2011    source источник
comment
Как я уже сказал в своем комментарии к ответу Джеймса, производительность сильно зависит от вашей платформы. Сколько лет вашему iSeries?   -  person John Y    schedule 22.11.2011
comment
1 год. Только что обновился. Хотя характеристики не знаю.   -  person Bill Martin    schedule 22.11.2011
comment
Тогда вам может понадобиться дополнительная оперативная память для достижения лучшей производительности. Вы не узнаете наверняка, пока не начнете им пользоваться.   -  person Mike Wills    schedule 22.11.2011
comment
@BillMartin - Согласно дорожной карте IBM, IBM подталкивает компании к переходу на Java/J2EE. Где я могу найти эту дорожную карту, пожалуйста?   -  person Dennis    schedule 02.08.2012


Ответы (4)


Моя компания также пытается перейти на Java из RPG.

  1. Мы не пытаемся использовать JRE на тонком клиенте, мы переходим к веб-приложениям, доставляемым через браузер. Это может повлечь за собой (в конечном итоге) замену наших старых POS-сканеров некоторыми из более новых сканеров на базе ПК.
  2. Мне сообщили (от архитекторов компании), что JVM в ОС iSeries действительно имеет некоторые проблемы с производительностью. Я лично не знаю, что это за ограничения. В нашем случае миграция включала в себя выделение ресурса AIX, что должно быть намного лучше — поговорите со своим представителем IBM о том, нужно ли вам просто приобрести лицензию на ОС (я просто программирую на этом, я не вмешиваюсь в процесс). аппаратное обеспечение).
  3. См. ответ на вопрос 1. В более широком контексте, когда вы пытаетесь обновить браузер (или любой другой ресурс), это обычно решается наличием корпоративных лицензий. , удаленные обновления.

Некоторые другие примечания:

  • Вы должны иметь возможность перейти только к использованию .NET, хотя для запуска среды вам может потребоваться другое оборудование/разделы. По крайней мере, так можно разговаривать с DB2. Единственное преимущество Java заключается в том, что он будет работать на той же ОС/аппаратном обеспечении, что и база данных.
  • Я видел здесь приложение для очистки экрана (оно было в VB.NET, но я уверен, что пример применим). Очистка экрана выполнялась путем получения / размещения символов в определенных позициях на экранах (эквивалент substring()). Это может быть просто API, который мы использовали — я думаю, что слышал о решениях, которые могли читать имена полей. Тем не менее, он также полагался на программный поток RPG для своей логики, и в остальном его нельзя было поддерживать.
  • Большинство RPG-программ, которые я видел и писал, имеют тенденцию нарушать MVC, а это означает, что вы не можете делать ничего меньшего, чем интеграционное тестирование — история и архитектура самого языка (и некоторые разработчики) предпочитают, чтобы все (доступ к файлам для отображения на экране) находиться в одном файле. Это также сделает практически невозможной попытку обернуть RPG для удаленного вызова. ЕСЛИ вы правильно разделили все на служебные программы, вы должны иметь возможность аккуратно их обернуть (почти как эквивалент вызова нативного метода) - к сожалению, я не не видел здесь ничего, что не полагалось бы на один или несколько трюков, которые не подходят для типичного использования в Интернете (например, использование файла в QTEMP для управления выполнением программы — сеанс на iSeries фактически исчезает каждый раз, когда запрашивается новая страница...).
  • Java как язык имеет тенденцию способствовать лучшему разделению кода (обратите внимание, что его можно использовать не по назначению), поскольку он не имеет истории RPG. В общем, может быть полезно думать о Java как о языке, в котором все является служебной программой, где все параметры передаются с установленным VALUE, OPTIONS(*nopass : *omit) не разрешено, CONST обычно рекомендуется, а большинство параметров имеют тип DS (структура данных — это является отдельным типом в RPG) и передается по указателю. Параметры уровня модуля не одобряются, если они предпочитают инкапсулировать все либо в переданных структурах данных, либо в самих процедурах служебной программы. STATIC используется в Java несколько иначе, делая переменную глобальной и недоступной внутри процедур.
  • RPG is quite a bit more simple than Java, generally, and OO-programming is quite a different paradigm. Here are some things that are likely to trip up developers migrating to Java:
    1. Arrays in RPG start at 1. Arrays in Java start at 0.
    2. В Java нет выходных параметров, и все примитивные типы передаются по значению (копируются). Это означает, что редактирование целого числа не будет видно при вызове методов.
    3. В Java нет упакованной/подписанной кодировки, поэтому перевод в/из чисел/строк более сложен. Тип Date в Java также имеет некоторые серьезные проблемы (в том числе и время), и его гораздо сложнее осмысленно изменить на/из символьного представления.
    4. Читать/записывать файлы на Java сложнее, даже при использовании SQL (и забудьте об использовании собственного ввода-вывода непосредственно с Java) - однако это можно несколько смягчить с помощью хорошей структуры.
    5. В Java нет операторов ENDxx, везде используются скобки ({}) для указания начала/конца блоков.
    6. В Java все находится в свободном формате, и нет никаких колоночных спецификаций (хотя сигнатуры процедур по-прежнему требуются). Жестких ограничений на длину строки нет, хотя по-прежнему рекомендуется ~80 символов. Инструменты (даже бесплатные) лучше, точка, и, как правило, намного полезнее (хотя тем, кто подвергается SEU, может потребоваться некоторое время, чтобы привыкнуть к ним). Существуют также огромные бесплатные библиотеки, доступные для скачивания.
    7. Знак = не является контекстно-зависимым в Java, как в RPG, он всегда используется для присваивания. Используйте оператор двойного равенства == для сравнения значений в Java.
    8. Объекты (структуры данных) нельзя осмысленно сравнивать с == — вместо этого вам часто потребуется реализовать метод с именем equals().
    9. Строки не изменяемы, их нельзя изменить. Все операции, выполняемые со строками (либо в самом классе/структуре данных, либо из внешних библиотек), возвращают совершенно новые ссылки. И да, строки считаются структурами данных, а не типами значений, поэтому их также нельзя сравнивать с ==.
    10. Встроенных эквивалентов директив прекомпилятора /copy нет. Попытка реализовать их означает неправильное использование Java. Поскольку они обычно используются для работы с «шаблонным» кодом (определения переменных или общий код), лучше иметь дело с этим в архитектуре. Определения переменных (на самом деле ВСЕ D-спецификации) будут обрабатываться с помощью операторов import или import static, в то время как варианты общего кода обычно обрабатываются фреймворком или определением нового класса.

Я уверен, что есть ряд других вещей, дайте мне знать, если у вас есть другие вопросы.

person Clockwork-Muse    schedule 21.11.2011
comment
Держите Java-программы в AS/400 в их собственном пуле памяти, чтобы добиться хорошей производительности. Необходимость делиться с миллионами недолговечных RPG-программ приведет к замене JVM. - person Thorbjørn Ravn Andersen; 25.11.2011

Распространение и управление толстым клиентом было бы абсолютным кошмаром.

Идеальным решением является веб-приложение на основе Java, размещенное на iSeries. Рабочие станции получают доступ к вашим приложениям через веб-браузер, как и в ASP.NET.

Я использую платформу Grails для модернизации и создания новых приложений, и она прекрасно работает.

person James Allman    schedule 21.11.2011
comment
Насколько «интимными» могут быть эти приложения для iSeries? Можете ли вы сделать бизнес-логику, аналогичную той, что доступна в RPG? Все, что мне удалось сделать с ASP.Net, — это обычные команды SQL. Сопоставимо ли время разработки между RPG и веб-экранами? Быстро ли реагируют? Мы вводим много данных и нуждаемся в быстром ответе. - person Bill Martin; 22.11.2011
comment
@BillMartin Вы можете поместить всю свою бизнес-логику на уровень службы или вызывать программы RPG для выполнения бизнес-логики. Время разработки зависит от опыта, поэтому на этот вопрос сложно ответить. Java в iSeries работает очень быстро. Интерфейсы браузера при правильном применении асинхронного javascript (Ajax) могут быть такими же быстрыми или даже быстрее, чем интерфейсы зеленого экрана. - person James Allman; 22.11.2011
comment
Скорость Java сильно зависит от того, какое оборудование и какая JVM используется. Это должно быть достаточно быстро на новых машинах. На старых машинах это было очень медленно. Кроме того, я думаю, что будет натяжкой сказать, что любой интерфейс браузера даже быстрее, чем интерфейс зеленого экрана. На современном серверном оборудовании с современным клиентским оборудованием интерфейс браузера может быть достаточно быстрым. - person John Y; 22.11.2011
comment
@JohnY Это полностью зависит от дизайна пользовательского интерфейса. Правильная реализация Ajax может сделать графический интерфейс популярным. Например, выполнение проверки в реальном времени, а не цикл «введите все, отправьте, исправьте ошибки, отправьте, повторите», значительно экономит время пользователя. Выполнение отправки формы ajax вместо POST/перерисовки может значительно ускорить массовый ввод данных. Клонирование зеленого экрана без использования преимуществ новой среды в лучшем случае будет тусклым. - person James Allman; 22.11.2011
comment
@JamesA: Ах, я полностью согласен с тем, что зеленые экраны ограничивают дизайн пользовательского интерфейса и что они, как правило, неуклюжи с точки зрения рабочего процесса. Когда я увидел слово быстро, я сразу подумал только о чистой задержке между сервером и клиентом. Да, смысл Ajax в том, чтобы заставить клиента делать больше, поэтому между клиентом и сервером должно передаваться меньше данных, но в какой-то момент данные нужно передавать, и в это время Я не понимаю, как это может быть быстрее, чем зеленый экран. Кроме того, на сильно слабых клиентах сам браузер может работать медленно. - person John Y; 22.11.2011
comment
@JohnY, новые JVM (неклассические) работают намного лучше, особенно в собственном пуле памяти. - person Thorbjørn Ravn Andersen; 25.11.2011

Когда IBM говорит, что вы должны перейти на Java/J2EE, вам, вероятно, следует переместить свои приложения в веб-приложения, такие как веб-приложения asp.net. Вероятно, вам следует использовать многофункциональный интерфейс, такой как JSF или GWT.

Веб-приложениям не нужно беспокоиться о проблемах с JRE, поскольку вам нужен только стандартный браузер.

Однако я не знаю RPG и не знаю предлагаемой стратегии миграции.

person Udo Held    schedule 21.11.2011
comment
Я не верю, что вопрос задан для альтернатив. Кроме того, с каких пор существует такая вещь, как стандартный браузер? - person Chris Browne; 22.11.2011
comment
Я считаю, что когда они говорят о переходе на J2EE, то все дело в веб-приложениях. Oracle предлагает то же самое для своих старых приложений Oracle Forms. - person Udo Held; 22.11.2011
comment
@Chris У меня есть дополнение: вы действительно думаете, что IBM предложит перейти на настольные приложения, где они ничего не зарабатывают, потому что базовая JRE бесплатна? У них есть огромный стек веб-приложений вокруг WebSphere. Сервер приложений, ESB, MQ и множество других технологий на основе J2EE. - person Udo Held; 22.11.2011
comment
@Chris: Цель этого сайта — помогать людям. Если кто-то считает, что использование другой альтернативы является лучшим решением для человека, задающего вопрос, почему бы ему не выразить это? Тем более, что вопрос тут не очень конкретный. Кажется, что он просто просит мыслей и опыта. (На самом деле это заигрывание с несоблюдением рекомендаций по вопросам о переполнении стека.) А теперь есть еще один ответ, похожий на этот. Значит, все мы (кроме вас) неправильно читаем вопрос? - person John Y; 22.11.2011

Я разработчик, занимаюсь модернизацией as400. Пока что, исходя из своего опыта, я могу поделиться с вами своим пониманием.

В дополнение к веб-сайтам на основе Java EE вы, вероятно, можете использовать веб-сервисы на основе jax-ws, которые предоставляют услуги для различных плоских и сетчатых экранов.

Клиенты могут потреблять их в любой технологии по своему желанию. Некоторая задержка есть, но общее удобство использования такое же, как и в обычных веб-приложениях.

person Sumit Bisht    schedule 06.01.2012