Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Профиль создается, когда вы в первый раз заходите в developerWorks. Выберите данные в своем профиле (имя, страна/регион, компания) которые будут общедоступными и будут отображаться, когда вы публикуете какую-либо информацию. Вы можете изменить данные вашего ИБМ аккаунта в любое время.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Передача объектов данных между Java-средами CICS: Часть 1: Java-среды CICS

Деннис Уэйенд, технический специалист по работе с пользователями CICS, Web и Java, группа технического обеспечения продаж, IBM
Фото Денниса Уэйенда
Деннис Уэйенд (Dennis Weiand) работает техническим специалистом по CICS, Web и Java в группе технического обеспечения продаж IBM в Далласе (штат Техас, США). С ним можно связаться по адресу: dweiand@us.ibm.com.

Описание:  Java становится популярным языком программирования CICS-приложений. CICS предоставляет несколько Java-сред, каждая из которых имеет свои сильные стороны, поэтому передача объектов данных между различными Java-средами CICS ― важная задача. Этот цикл статей посвящен данной теме. В Части 1 приводится описание Java-сред CICS, отмечаются преимущества каждой из них и предлагаются различные способы передачи данных между ними. В Части 2 используется пример класса Java для демонстрации того, как передавать объекты данных Java между приложениями, запущенными в обобщенной среде JVM CICS, JVM на основе Axis2, CICS Dynamic Scripting и в JVM CICS на основе OSGi. В Части 3 показано, как передавать объекты данных Java из клиентской программы CICS Transaction Gateway Java в обобщенную среду JVM CICS или JVM CICS на основе OSGi.

Больше статей из этой серии

Дата:  20.08.2012
Уровень сложности:  средний
Активность:  7647 просмотров
Комментарии:  


Введение

Одно из преимуществ системы IBM® CICS® заключается в том, что она поддерживает несколько языков программирования и позволяет смешивать их в рамках одного приложения. Но что если в CICS-приложениях используется только язык Java и желательно использовать достоинства разных Java™-сред CICS? При передаче данных между программами CICS они обычно помещаются поле-ориентированную структуру последовательных байтов, к которой может обращаться приложение, написанное на любом языке. Однако если используется только язык Java, удобнее оставаться в объектно-ориентированном мире Java и передавать объекты данных Java между Java-программами на базе CICS. Этот цикл статей посвящен Java-средам CICS, доступным в CICS TS V4.2 и более поздних версиях CICS, и хотя он предназначен для Java-программистов, пишущих программы для CICS, эти статьи будут также полезны системным и прикладным программистам, которые работают с CICS и начинают использовать Java.

Система CICS позволяет управлять пулом виртуальных машин Java (JVM) с 1999 года, когда в ней впервые появилась поддержка Java, причем в каждый момент времени в JVM может направляться только одна Java-транзакция (отсюда и потребность в обобщенной среде JVM). В версии CICS TS V4.1 (июнь 2009 г.) появляется ресурс JVMServer, который представляет собой JVM, способную принимать несколько транзакций CICS одновременно. Сначала он был доступен только для системных функций, но в версии CICS TS V4.2 (июнь 2011) JVMServer может исполнять Java-программы с помощью механизма Web-сервиса с открытым исходным кодом Axis2 от Apache Software Foundation, и его можно применять также для написанных приложений с использованием инициативы Open Services Gateway (OSGi).

В июне 2010 года в CICS TS V4.1 появился пакет CICS Dynamic Scripting Feature Pack, который представляет собой реализацию технологии Project Zero и обеспечивает возможность гибкой разработки ситуационных Web-приложений. Feature Pack обслуживает Web-артефакты, позволяет использовать языки сценариев PHP и Groovy и предлагает модель быстрой реализации доступа к базе данных для ситуационных приложений, значительно облегчая определение и представление таблиц базы данных с помощью интерфейса REST. Feature Pack выполнен в среде CICS JVMServer и имеет мост к Java, обеспечивающий доступ к программам и ресурсам CICS.

В дополнение к Java в качестве языка программирования сервера CICS Java-клиенты, работающие в различных не-CICS средах, могут вызывать программы, исполняемые в CICS. CICS Transaction Gateway позволяет передавать информацию из Java-клиента в CICS с использованием Java Connector Architecture (JCA) Java Enterprise Edition (JEE). Кроме того, WebSphere Optimized Local Adapter (WOLA) обеспечивает связь между сервером приложений WebSphere® и CICS, когда то и другое выполняется в одном и том же логическом разделе (LPAR) z/OS®.

При передаче данных между CICS-программами, работающими в разных Java-средах, предоставленных CICS, или из клиентских Java-программ в CICS-приложения можно использовать область связи (COMMAREA) размером до 32K или каналы и контейнеры для передачи больших объемов данных (каналы и контейнеры добавлены в 2005 году). COMMAREA и каналы/контейнеры удобны для COBOL и других поле-ориентированных языков программирования, поддерживаемых CICS, и эти механизмы связи позволяют Java-программе взаимодействовать с процедурными поле-ориентированными языками, работающими в среде CICS. Для приложений, реализованных в разных JVM-средах, предоставленных CICS, передача объектов плохо согласуется с Java, так как для использования механизма связи "программа-программа" CICS требуются дополнительные шаги.

Например, возможно, в предоставленной CICS среде OSGi придется реализовать бизнес-логику на основе Java, чтобы воспользоваться возможностями и функциями OSGi. Или представить некоторые основанные на Java бизнес-функции в качестве Web-сервисов с использованием предоставленной CICS среды Axis2 (которая выполняется на другом сервере JVM). Может также понадобиться быстро предоставить Web-интерфейс для своей бизнес-логики на базе OSGi с помощью CICS Dynamic Scripting (еще один сервер JVM) или обеспечить не-CICS Java-клиентам доступ к бизнес-логике на базе OSGi с использованием CICS Transaction Gateway (который выполняется в JVM вне CICS).

В этой статье предлагается согласованный с Java способ передачи объектов между Java-программами, работающими в разных JVM в среде CICS, или между предоставленными CICS Java-средами, расположенными в разных областях CICS. Она содержит справочную информацию по передаче Java-объектов и объясняет причины использования различных Java-сред, предоставляемых CICS.

Для чего это нужно

Традиционный способ передачи данных между приложениями в среде CICS состоит в том, чтобы поместить данные в поле-ориентированные структуры последовательных байтов, а эти структуры ― в COMMAREA или в CICS-контейнер в CICS-канале. Затем COMMAREA или канал передается при вызове целевой программы с помощью команды EXEC CICS LINK PROGRAM(). Для COBOL, IBM Assembler и других языков, поддерживаемых CICS, никакого маршалинга данных не требуется. Однако для Java-программы на базе CICS объекты данных Java необходимо маршалировать в поле-ориентированные структуры последовательных байтов и демаршалировать их в обратную сторону. Существуют утилиты для генерации кода маршалинга, а для ввода данных в эти утилиты используется структура данных COBOL. Если в CICS-приложении применяется несколько языков программирования, то делать что-то особенное для Java ничуть не проще, чем позволить Java-программами на основе CICS взаимодействовать с CICS-программами, написанными на других языках.

Для Java-программ, работающих в единой Java-среде, предоставленной CICS, как обычно, используется Java с созданием экземпляров классов и вызовом методов. Если же нужно воспользоваться преимуществами разных предоставленных CICS Java-сред, то для передачи Java-данных придется прибегнуть к помощи CICS. Для тех Java-приложений на основе CICS, которые охватывают несколько предоставляемых CICS Java-сред, нужен дружественный Java способ передачи объектов данных Java между этими средами. Для доступа Java-программы к функциям, предоставляемым Java-программой, работающей в другой предоставленной CICS Java-среде, Java-программисту было бы удобно, чтобы передача данных осуществлялась столь же просто, как в следующем фрагменте кода:

String abc = "Some information to Pass";
Employee emp = new Employee("John Doe");
DDW_CicsObjectTransporter transporter = 
    new DDW_CicsObjectTransporter();
transporter.addObject("abc",abc)
.addObject("emp",emp)
    .execute("TARGET");

// и после ответа программы

String errorString = (String)transporter.getObject("error");
If (errorString != null) {
    processError();
} else {
    Manager newManager = (Manager)transporter.getObject("mgr");
    // обработка/отображение возвращенного объекта Manager
}

И Java-программисту было бы удобно, чтобы для отвечающей Java-программы, которая возвращает данные, ответ составлялся так же легко, как в следующем примере:

DDW_CicsObjectTransporter transporter = 
    new DDW_CicsObjectTransporter();
Employee emp = (Employee)transporter.getObject("emp");
// работа с объектом employee 
transporter.removeObject("abc");    // объект transport  можно удалить
Manger mgr = new Manger("Joe Bloggs");
transporter.addObject("mgr",mgr);  // добавление нового или измененного объекта
return;

Во второй статье этого цикла показано, как реализовать приведенный выше способ, и приведен простой пример Java-класса DDW_CicsObjectTransporter, который позволяет выполнить указанное взаимодействие. Кроме того, для транспортировки объектов между Java-клиентами, использующими CICS TG и CICS TS, применяется объект DDW_CicsTg_ObjectTransporter.

Java-среды, предоставляемые CICS

У каждой Java-среды, предоставляемой CICS, есть свои сильные стороны, поэтому для работы приложения могут понадобиться несколько таких сред. Как указано выше, цель этого цикла статей ― обеспечить платформу для упрощения передачи Java-объектов между этими средами.

Обобщенная среда JVM

С 1999 года CICS предлагает обобщенную среду JVM. Вы указываете максимальное количество JVM, которые могут составлять пул, и CICS использует эти JVM для исполнения Java-программ CICS. В обобщенной среде JVM CICS направляет в JVM только одну Java-программу за раз. Это обеспечивает отличную изоляцию программ, но в случае Java-программами это обычно не нужно, зато максимальное количество Java-программ, которые могут выполняться в области CICS одновременно, равно числу JVM в пуле JVM.

Когда CICS получает запрос, он запускает программу для передачи ответа. Поэтому необходимо определить Java-программы для CICS посредством определения PROGRAM, указав начальный Java-класс, который нужно вызвать, ключ хранилища, которое нужно открыть (ключ CICS или USER) и файл JVMProfile, в котором указаны характеристики JVM, необходимые для этой программы, включая CLASSPATH, LIBPATH, размер кучи JVM, драйвер DB2 и т.п.

При отправке Java-программы CICS выбирает JVM из этого пула JVM, которая соответствует требованиям, указанным в определении PROGRAM программы (файл JVMProfile и ключ исполнения). Затем в этой JVM запускается Java-программа. Выполнение Java-программы начинается в указанном классе, в методе с подписью public static void main(CommAreaHolder ca) или public static void main(String[] args).

Java-программы взаимодействуют с CICS с использованием Java-эквивалента команд CICS EXEC, именуемого классами JCICS. Кроме взаимодействия с ресурсами CICS и вызова CICS-программ, написанных на других языках, Java-программы могут взаимодействовать с DB2 или WebSphere MQ и решать другие специфичные для Java задачи. Java-программы всегда должны использовать объекты CICS, если те существуют (например, DB2-соединения CICS), чтобы CICS могла управлять элементами работы – эта одна из многих задач, превосходно решаемых CICS.

Память для JVM берется из адресного пространства области CICS. CICS TS V4.1 и более ранние версии используют 31-разрядную JVM, и, следовательно, 31-разрядное хранилище в области адресного пространства CICS, а это означает, что под управлением одной области CICS могут работать относительно немного JVM. Обычно несколько CICS-областей обслуживают общую бизнес-функцию, поэтому в ситуациях, когда требуется больше параллелизма, чем может обеспечить одна CICS-область, можно запустить несколько областей Java Owning Region (JOR) и организовать работу в них. CICS TS V4.2 использует 64-разрядную JVM, которая может размещаться в 64-разрядной памяти, так что несколько JVM могут располагаться в пуле JVM, управляемом одной CICS-областью; это ослабляет или исключает потребность в нескольких CICS-областях для обслуживания большего объема Java-задач.

В CICS TS V4.2 написанные заказчиком программы можно запускать в среде JVM-сервера (см. следующий раздел). Анонсируя CICS TS V4.2, IBM утверждала, что в следующей версии среда обобщённых JVM будет исключена из CICS.

Среда JVM-сервера CICS

В CICS TS V4.1 (июнь 2009 г.) появился ресурс JVMSERVER, который представляет собой среду JVM-сервера. Эта среда JVM-сервера позволяет решать несколько задач CICS Java одновременно в одной и той же JVM. При определении ресурса JVMSERVER указывается максимальное число (от 1 до 256) параллельных Java-задач, которые могут размещаться в одной JVM. Можно запустить несколько JVM-серверов под контролем одной CICS-области, однако общее количество задач, размещенных во всех серверах JVM, управляемых одной CICS-областью, не должно превышать 1024. В CICS TS V4.1 среду JVM-сервера использует только CICS Dynamic Scripting (см. ниже), а также SupportPac CN11, который обеспечивает пакетный контейнер для WebSphere XD Compute Grid. Версия CICS TS V4.2 (июнь 2011 г.) перешла на 64-разрядную среду Java 6.0.1 с добавлением JVM-сервера на базе OSGi и JVM-сервера на базе Axis2, где можно развертывать пользовательские Java-программы.

Среда JVM-сервера на базе OSGi

Для среды JVM-сервера на базе OSGi в CICS TS V4.2 требуется, чтобы Java-программы были упакованы с применением OSGi-комплектов . OSGi ― это система динамических модулей для Java, реализованная во всех основных серверах Java-приложений. Модульность OSGi обеспечивает механизм для разделения системы на независимые модули, называемые комплектами (bundles), которые упакованы и устанавливаются отдельно, так что у каждого из них свой собственный независимый жизненный цикл. Такая модульность позволяет разбить сложное приложение на независимые части для облегчения разработки, тестирования и обслуживания.

Без OSGi Java-классы и файлы JAR предоставляются JVM посредством их указания в переменной среды CLASSPATH. Это статическая переменная, которая не меняется на протяжении жизненного цикла JVM. С помощью OSGi Java-классы можно добавлять и удалять из JVM динамически.

OSGi обеспечивает также размещаемый в оперативной памяти реестр служб, в котором другие модули могут искать нужные им службы и устанавливать связь с ними. Компоненты, выполненные из модулей, можно публиковать в реестре служб OSGi, где их будут находить и привязывать другие модули. В комплекте компоненты могут демонстрировать все свои классы или предоставлять специальные интерфейсы. Аналогично, компонент может объявить свои зависимости от других комплектов и модулей. Модуль может содержать методы жизненного цикла, которые вызываются при установке, удалении или обновлении модуля. Можно также предоставить точки расширения, чтобы позволить другим расширить функциональность вашего модуля.

Один или несколько пакетов Java (содержащих классы) группируются в комплект OSGi. Среда CICS позволяет группировать один или несколько комплектов OSGi в CICS BUNDLE. При установке, включении, отключении и удалении CICS BUNDLE комплекты OSGi в составе CICS BUNDLE претерпевают соответствующие изменения жизненного цикла OSGi, позволяя динамически добавлять и удалять классы и пакеты Java на работающем сервере CICS JVM. Состояние жизненного цикла комплекта OSGi и CICS BUNDLE может отображаться с помощью CICS Explorer. JVM-сервер на базе OSGi следует рассматривать как стратегическое направление развития бизнес-логики на основе Java в CICS.

Когда CICS получает запрос, запускается программа для передачи ответа. Поэтому Java-программы для CICS необходимо определить посредством определения ресурсов PROGRAM. Для Java-программы на базе CICS, которая будет работать на JVM-сервере, необходимо составить определение PROGRAM с указанием CONCURRENCY(REQUIRED), хранилища ключей CICS, имени ресурса JVMSERVER, в котором эта программа должна работать, и имени записи в реестре OSGi, который ссылается на Java-программу.

При упаковке Java-программ в комплект OSGi для тех классов, с которых CICS начинает исполнение, в манифесте комплекта, определяющем класс, с которого должно начинаться исполнение, указывается ключевое слово CICS-MainClass=. Ключевое слово CICS-MainClass= заставляет среду CICS OSGi зарегистрировать указанный класс в реестре OSGi. Как и в случае обобщенной среды JVM, выполнение Java-программы начинается с указанного класса, в методе с подписью public static void main(CommAreaHolder ca) или public static void main(String[] args).

Как и в случае обобщенной среды JVM CICS, Java-программы взаимодействуют с CICS с использованием Java-эквивалента команд CICS EXEC, именуемых классами JCICS. Кроме взаимодействия с ресурсами CICS и вызова CICS-программ, написанных на других языках, Java-программы могут взаимодействовать с DB2 или WebSphere MQ и решать другие специфичные для Java задачи. Java-программы всегда должны использовать объекты CICS, если те существуют (например, DB2-соединения CICS), чтобы CICS могла управлять элементами работы (эта одна из многих задач, превосходно решаемых CICS).

Память для серверов JVM берется из адресного пространства области CICS. CICS TS V4.2 использует 64-разрядные JVM, которые могут размещаться в 64-разрядной памяти, поэтому в одной и той же области CICS могут размещаться несколько JVM-серверов. CICS может помещать в один JVM-сервер от 1 до 256 параллельных задач; значение по умолчанию составляет 15. Сумма всех параллельных задач, решаемых во всех JVM-серверах одной и той же области, не должна превышать 1024.

Среда JVM-сервера на базе Axis2

С момента выхода CICS TS V3.1 (март 2005 года) CICS позволяет представлять CICS-программы как Web-сервисы , а раньше это делалось с помощью SupportPac (март 2003 года) или через функцию SOAP для CICS (сентябрь 2003 года). Поддержка Web-сервисов, впервые проявившаяся в CICS TS V3.1, позволяет представлять CICS-программы, которые вызываются с помощью CICS COMMAREA или каналов и контейнеров (см. ниже).

В качестве дополнительной возможности представлять CICS-программы на языке Java в виде Web-сервисов CICS TS V4.2 (июнь 2011 года) включает Axis2, механизм Web-сервисов с открытым исходным кодом от Apache, введенный в CICS для обработки сообщений SOAP в Java-среде. Использование в CICS технологии Axis2 для Web-сервисов на основе Java обеспечивает более эффективное использование специальных возможностей процессора zAAP. В некоторых ситуациях синтаксический анализ Java и XML можно переложить с процессора общего назначения в мейнфрейме IBM на специальный процессор, такой как System z Application Assist Processor (zAAP).

Поддержка Axis2 в CICS позволяет представлять Java-программы на базе CICS и разрабатывать программы обработчика заголовков в стиле Axis2 на языке Java. Axis2 поддерживает оперативное развертывание Web-сервисов и обработчиков, асинхронные Web-сервисы, Message Exchange Pattern (MEP) (в составе WSDL 2.0), WSDL 1.1 и 2.0, а также представление Plain Old Java Objects (POJO) в качестве Web-сервисов с помощью аннотаций, которые являются частью JAX-WS. Инструментарий для создания артефактов Axis2 входит в Java 6 Java Standard Edition (JSE).

Динамические сценарии CICS

В июне 2010 года в CICS появился CICS Transaction Server Feature Pack for Dynamic Scripting. Этот пакет компонентов выполняется на JVM-сервере и представляет собой реализацию технологии Project Zero. Цель Project Zero ― создание гибкой среды программирования, которая позволяет программистам быстро создавать ситуативные приложения, такие как приложения для временного маркетингового проекта или средства повышения производительности труда подразделения или группы.

CICS Transaction Server Feature Pack for Dynamic Scripting позволяет быстро создавать Web-страницы и писать приложения на языках PHP, Groovy и Java. Поскольку Feature Pack реализован в среде Java, предоставляется мост для Java. В PHP- или Groovy-программе можно создавать экземпляры Java-классов и вызывать методы этих классов. В дополнение к использованию возможностей Java Java-мост позволяет PHP- и Groovy-сценариям использовать классы JCICS и взаимодействовать с ресурсами CICS (классы JCICS – это Java-эквивалент команд EXEC CICS). Project Zero предоставляет также Zero Resource Model (ZRM), обеспечивая быстрый способ определения таблиц и получения доступа к данным в этих таблицах с помощью интерфейса REST или простого API, основанного на коллекциях и элементах этих коллекций. Кроме того, можно обращаться к информации базы данных с помощью SQL, и поддерживаются базы данных DB2 и Derby.

Обращение к приложениям на основе динамических сценариев CICS производится посредством HTTP-запросов Web-страниц (на основе HTML, JavaScript или каскадных таблиц стилей), вызова PHP- или Groovy-сценариев или REST-сервисов.

Можно написать все приложение на PHP или Groovy, но к бизнес-логике таких приложений допускается обращаться только через HTTP-запросы, адресованные приложению с динамическим сценарием CICS. Поэтому рекомендуется выполнять бизнес-логику на базе Java на JVM-сервере на базе OSGi, чтобы к ней можно было обращаться из любого объекта или клиента CICS посредством любого способа взаимодействия CICS. Динамические сценарии CICS можно использовать для быстрого создания уровня представления для своего бизнес-уровня на базе OSGi.

В версии CICS TS V4.1 работает CICS Transaction Server Feature Pack for Dynamic Scripting V1.0, а в версии CICS TS V4.2 ― CICS Transaction Server Feature Pack for Dynamic Scripting V1.1.

CICS Transaction Gateway

CICS Transaction Gateway (CICS TG) обеспечивает безопасную передачу транзакций в CICS из различных клиентских языков программирования, таких как C/C++, Java, Microsoft® .NET, Microsoft Visual Basic, PowerBuilder и COBOL для рабочих станций.

Для Java-клиента, работающего в не-CICS среде, CICS TG реализует архитектуру Java Connector Architecture (JCA), которая определяет стандартный способ связи Java-программ с корпоративными информационными системами (EIS), такими как CICS, IMS, JDEdwards, PeopleSoft и SAP. JCA определяет способ реализации управляемых или неуправляемых соединений, используя стандартный API Common Client Interface (CCI). С помощью управляемого соединения сервер приложений Java Enterprise Edition (JEE) может управлять соединением, обработкой транзакций и распространением контекста безопасности. Этот стандартный API CCI позволяет Java-программисту использовать общий API для доступа к различным EIS.

CICS TG можно настроить на разные конфигурации – см. Информационный центр CICS TG.

Для сценариев, в которых клиентская программа CICS TG написана на Java и серверная бизнес-логика CICS также реализована на Java, методы, приведенные в этой статье, можно использовать для передачи данных Java-объектов из клиентской программы CICS TG в Java-программу на основе CICS, реализующую бизнес-логику.

Передача данных между CICS-программами

К предлагаемым CICS методам передачи данных между CICS-программами относится COMMAREA и передача канала и контейнеров.

COMMAREA

Большую часть 40-летней истории CICS стандартным способом передачи данных между программами, составляющими приложение, служил блок памяти размером до 32 КБ, называемый областью связи (communications area - COMMAREA). В прошлом CICS поддерживала главным образом процедурные языки, такие как COBOL и PL/I, в которых можно просто определить поле-ориентированную структуру данных COMMAREA. Во время выполнения программа, написанная на процедурном языке, помещает данные в структуру и обращается через LINK к другой CICS-программе, передавая COMMAREA (LINK ― это CICS-эквивалент вызова программы). Подход LINK позволяет передавать данные между CICS-программами, написанными на одном и том же или на разных языках, которые выполняются в одной и той же или в разных областях CICS.

На рисунке 1 показан пример программы, передающей COMMAREA. COMMAREA очень удобна для процедурных языков, которые работают с полями фиксированного размера, когда общий размер передаваемых данных не превышает 32 КБ, но неудобна для передачи данных в Java-программы. Ближайшая конструкция, имеющаяся в Java для таких поле-ориентированных последовательностей байтов, ― это массив байтов. Однако массив байтов Java не предусматривает систему обозначений для доступа, например, к байтам с 75-го по 100-ый посредством имени, такого как customerAddress. Поставляемые с IBM z/OS Java инструменты, подобные утилите JZOS, и мастера Rational Application Developer позволяют создавать объекты данных Java из структур данных COBOL. Эти инструменты и мастера ― хорошее решение, если необходимо перемещать данные между Java и другим языком программирования в CICS. Они предоставляют методы доступа Java для каждого поля в конструкции и метод getBytes()/setBytes() или getByteBuffer()/setByteBuffer(), когда Java-программе нужно передать данные в CICS или получать их из CICS.

При передаче данных между Java-программами в единой Java-среде CICS используется обычный для Java подход создания экземпляра объекта (например, CheckingAccount) и вызова методов этого объекта (например, computeInterest()). Если Java-приложение охватывает разные Java-среды CICS или несколько областей CICS, оно может вызывать разные Java-программы с помощью команды CICS LINK. Использование COMMAREA ― один из способов передачи данных между такими Java-программами, но он требует перехода от Java-объектов к структуре поле-ориентированных последовательностей байтов (байтовому массиву). Кроме того, при обращении через LINK к целевой Java-программе, работающей в другой Java-среде CICS, нужно перейти из байтового массива в один или несколько Java-объектов целевой Java-программы.

Java-программисты могут сериализовать объекты, которые нужно передать (для чего объект нужно преобразовать в байтовый массив), передать сериализованный объект посредством COMMAREA и десериализовать объект в целевой Java-программе. Однако может потребоваться передача нескольких объектов или превышение ограничения в 32 КБ. Кроме того, при передаче данных в любом направлении COMMAREA обычно имеет одну и ту же длину.


Использование COMMAREA для межпрограммного обмена

Каналы и контейнеры

После выхода CICS TS V3.1 (март 2005 года) для связи между программами можно поместить большое количество данных в набор именованных контейнеров, связанных с конкретным каналом. В этом канале можно разместить любое число контейнеров, а затем передать его (со всеми контейнерам) целевой программе, как показано на рисунке 2. CICS не ограничивает размер контейнеров или количество контейнеров в канале. Однако существуют практические ограничения, зависящие от интенсивности поступления транзакций и сочетания программ, так как пространство для контейнеров берется из хранилища области CICS. Как правило, стараются использовать столько контейнеров, сколько нужно приложению, не тратя пространство понапрасну, иначе приложение может непреднамеренно вызвать состояние нехватки памяти CICS.


Использование каналов и контейнеров для межпрограммного обмена

На рисунке 2 видно, что контейнеры имеют имена и могут быть любого размера. Если контейнер передается из программы A в программу B и не изменяется программой B, то CICS "знает", что этот контейнер не нужно возвращать программе A, потому что в программе A уже есть копия его содержимого. Если программа B получает контейнер от программы A, то программа B может изменить данные и размер этого контейнера. В процедурных языках программирования каждый контейнер может иметь свою собственную структуру данных, содержащую 0 или более полей. При передаче данных между Java и процедурными языками из структуры данных контейнера, определенной в COBOL, с помощью утилиты JZOS или мастеров Rational Application Developer создается Java-объект. Эти Java-объекты позволяют получить доступ к данным из Java с помощью методов Get и Set и процедурного языка с использованием обычной процедурной поле-ориентированной структуры данных. Утилита JZOS и мастера Rational Application Developer были описаны выше в разделе, посвященном COMMAREA.

Существуют контейнеры двух типов: CHAR и BIT. Контейнеры типа CHAR предназначены для символьных данных, и если требуется, то CICS может выполнить преобразование кодовых страниц для контейнеров типа CHAR. Контейнеры типа BIT предназначены для двоичных данных, аналогично байтовым массивам Java.

На рисунке 2 также видно, что каналы и контейнеры можно рассматривать как ассоциативный массив, подобный хэш-таблице Java, тогда как канал – это аналог массива контейнеров. Чтобы получить доступ к содержимому контейнера, нужно обратиться к контейнеру по имени.

При использовании Java-клиента в не-CICS среде для взаимодействия с CICS-программой, при использовании CICS TG V7.1 или более поздней версии, при использовании IPIC в качестве способа связи и при обращении к CICS TS V3.2 или более поздней версии Java-клиент тоже может применять каналы и контейнеры.

Передача объектов Java между Java-программи CICS

Основываясь на полученной здесь информации, вы, вероятно, пришли к заключению, что если ваша цель ― передавать данные из Java-программы, работающей в Java-среде CICS, в Java-программу, работающую в другой Java-среде CICS, то можно просто передавать сериализованные Java-объекты, используя каналы и контейнеры CICS. Эта процедура позволяет избежать:

  • создания структуры тетради COBOL для данных, передаваемых между Java-программами;
  • запуска утилиты для создания объекта данных Java из тетради COBOL;
  • необходимости Java-программисту знать COBOL;
  • необходимости хранить требуемые тетради COBOL в своем хранилище исходного кода;
  • необходимости обеспечивать цикл обработки тетради COBOL;
  • необходимости обновлять тетрадь COBOL при изменении содержания передаваемых данных (и выполнять последующее обновление хранилища и цикл обработки).

Идеи сериализации объектов хорошо знакомы Java-программисту, и в Интернете есть несколько примеров Java-кода для сериализации объектов. Сериализация Java-объектов и их передача в каналы и контейнеры обеспечивает простой механизм передачи Java-объектов между Java-программами на основе CICS в различных Java-средах на базе CICS (или между Java-средами, контролируемыми разными областями CICS). Используя LINK для Java-программы CICS (или клиентской Java-программы CICS TG), можно сериализовать Java-объекты для передачи в серию контейнеров. Затем Java-программа, на которую указывает LINK, может десериализацовать объекты, изменить их как требуется, сериализовать измененные объекты обратно в контейнер и возвратить его исходной программе.

Работая с Java-классами в одной Java-программе на базе CICS, вы делаете это как обычно ― создаете экземпляр объекта и вызываете методы объекта. Транспортировка Java-объектов между Java-средами CICS необходима только тогда, когда нужно перемещать данные между различными Java-средами CICS, чтобы использовать преимущества каждой из них, перемещать данные в Java-среду CICS в другой области CICS или распространять приложение в разных Java-средах CICS в целях управления задачами или обеспечения доступа к приложениям.

Во второй статье этого цикла мы покажем, как использовать каналы и контейнеры для передачи объектов данных Java, и расскажем об обобщенной среде передачи данных между приложениями CICS. В Части 2 будут приведены также Java-классы, которые выполняют функции сериализации/десериализации Java-объектов и функции LINK, позволяя Java-программисту сосредоточиться на аспектах своего приложения, не вдаваясь в детали передачи Java-объектов между различными Java-средами CICS.

Заключение

В этой статье описаны различные Java-среды, которые обеспечивает CICS:

  • традиционная обобщенная среда JVM, в которой в каждый момент времени выполняется только одна Java-транзакция на базе CICS;
  • среда JVM-сервера CICS, в которой несколько запросов Java-программ могут выполняться в одной и той же JVM одновременно. Следующие Java-среды, предоставляемые CICS, используют сервер JVM (но их нельзя смешивать в одном сервере JVM):
    • среда на основе OSGi, которая обеспечивает систему динамических модулей OSGi с такими функциями, как динамическое добавление в JVM и удаление Java-классов, обеспечение реестра OSGi, предоставление Java-модулю только интерфейсов, а не всех классов модуля, и определение зависимостей между модулями, практически устраняя типичные проблемы ClassNotFound;
    • механизм Web-сервисов с открытым исходным кодом Axis2, который позволяет быстро и легко предоставить POJO с помощью аннотаций JAX-WS и писать обработчики в стиле Axis2;
    • CICS Dynamic Scripting ― быстрый способ разработки Web-приложений с использованием языков сценариев PHP и Groovy. Интерпретаторы PHP и Groovy реализованы на Java, так что это Java-мост, который позволяет создавать экземпляры объектов Java и вызывать программы CICS;
  • CICS Transaction Gateway, который облегчает сообщение между Java-программой, работающей в не-CICS среде, и программой CICS TS.

Кроме того, в статье описаны два способа передачи данных между CICS-приложениями:

  • COMMAREA – единый блок данных размером до 32 КБ;
  • каналы и контейнеры – множество именованных блоков данных произвольной длины (контейнеры), сгруппированных в именованный канал.

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


Ресурсы

Об авторе

Фото Денниса Уэйенда

Деннис Уэйенд (Dennis Weiand) работает техническим специалистом по CICS, Web и Java в группе технического обеспечения продаж IBM в Далласе (штат Техас, США). С ним можно связаться по адресу: dweiand@us.ibm.com.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=WebSphere, Технология Java
ArticleID=831004
ArticleTitle=Передача объектов данных между Java-средами CICS: Часть 1: Java-среды CICS
publish-date=08202012