Автор: Чжу Сяньчжун Источник компилятора: Tianji.com
Аннотация В этой статье рассказывается, как реализовать взаимодействие между вашим приложением ASP.NET и сервером приложений J2EE и как сделать вызов EJB таким же простым, как вызов веб-службы XML.
Введение
Сегодня многие крупные организации имеют и используют команды разработчиков и серверы публикации, которые представляют собой смесь технологий .NET и J2EE. Чтобы сбалансировать корпоративное качество, передаваемое через сервер приложений J2EE, бизнес-логика компании часто публикуется на сервере приложений J2EE в форме корпоративных JavaBeans (EJB). С другой стороны, чтобы удовлетворить постоянно меняющиеся требования развития бизнеса, большинство разработчиков предпочитают реализовывать логику описания в среде разработки Visual Studio.NET с высокой производительностью. Проблема возникает, когда вам нужно соединить уровень представления .NET с уровнем бизнес-логики J2EE.
Давайте посмотрим, как Visual MainWin для J2EE может помочь вам справиться с трудностями — из Visual Studio.NET используйте C# или Visual Basic.NET для реализации уровня описания ASP.NET, а затем вызовите уровень бизнес-логики, реализованный в виде EJB — это сложная задача для разработки. Будьте уверены, для этого вам не придется возиться с кодированием EJB API. Благодаря Visual MainWin для J2EE оба уровня — интерфейс ASP.NET и серверная часть EJB — могут работать как чистое приложение J2EE на сервере приложений J2EE с оптимизацией производительности и последовательной безопасностью на основе J2EE.
Чтобы вызывать EJB из Visual Studio .NET, необходимо установить корпоративную версию Visual MainWin для J2EE. Конечно, вы можете скачать ознакомительную версию с сайта mainsoft.com для экспериментального анализа.
Пример анализа
Пример StocksPortfolio из этой статьи, показывающий, как создать приложение с использованием веб-уровня ASP.NET и бизнес-уровня J2EE, установлен и задокументирован в Visual MainWin для J2EE. В этом примере реализована простая веб-страница ASP.NET, используемая пользователями для управления своими инвестициями в акции, и веб-служба ASP.NET, используемая для предоставления вымышленных котировок акций. В этом примере также используется сессионный EJB, используемый вашим сервером приложений J2EE для реализации логики покупки и продажи акций.
Рис. 1. Приложение StocksPortfolio, работающее на сервере приложений JBoss.
Добавьте EJB в среду .NET.
Вызвать EJB из Visual Studio.NET так же просто, как вызвать веб-службу. В обозревателе решений щелкните правой кнопкой мыши «Ссылки» и выберите «Добавить ссылку EJB». Появится новый тип ссылки, который можно использовать только в проектах Visual MainWin для J2EE, который очень похож на стандартную веб-ссылку Visual Studio. NETIDE (см. рисунок 2).
Рисунок 2. Добавление ссылки EJB
Чтобы добавить ссылку EJB в проект Visual MainWin for J2EE, вам понадобится только файл Java-архива (JAR), который реализует EJB или содержит его локальные и удаленные интерфейсы. Visual MainWin может запрашивать у сервера приложений информацию обо всех опубликованных на нем EJB-компонентах и отображать EJB-компоненты, соответствующие вашему определению JAR, в диалоговом окне. Вам просто нужно выбрать конкретный EJB (возможно, несколько), который вы хотите использовать (см. рисунок 3).
Рисунок 3. Диалоговое окно «Добавление ссылки на EJB».
Вы также можете использовать EJB на удаленном сервере приложений, если он того же типа, что и локальный сервер приложений, связанный с вашим проектом. Это может быть Windows, Linux, Unix, мэйнфрейм или любой другой сервер с поддержкой J2EE. Чтобы использовать EJB, опубликованный на удаленном сервере, нажмите «Дополнительно», чтобы развернуть диалоговое окно (см. рисунок 4).
Рисунок 4. Диалоговое окно «Добавление ссылки EJB» в расширенном режиме
Введите URL-адрес JNDI для удаленного сервера приложений J2EE и нажмите «Извлечь с сервера». Visual MainWin выведет список всех EJB, опубликованных на удаленном сервере, и EJB, соответствующих вашему JAR-файлу. Эта операция совместима с локальным EJB.
Выберите EJB, который вы хотите использовать (их может быть несколько), и нажмите «ОК». В браузере Solution Explorer создается новая справочная папка EJB, как показано на рисунке 5. Эта папка содержит серверную ссылку для каждой вновь добавленной ссылки EJB, аналогичную узлу веб-ссылки. Кроме того, создается класс-оболочка для упрощения кодирования вызовов EJB. Мы обсудим этот класс-оболочку в следующем разделе.
Рис. 5. Папка Solution Explorer со ссылкой на EJB.
Вызов методов EJB из .NET
. Когда вы добавляете ссылку EJB в свой проект, система автоматически создает класс .NET (C# или VB.NET). Он описывает простой интерфейс для EJB. . Этот класс включает код J2EE, необходимый для создания EJB и вызова его методов. Этот класс .NET предоставляет методы удаленного интерфейса EJB через свои собственные общедоступные методы. Чтобы вызвать бизнес-методы вашего EJB, вы просто создаете экземпляр класса-оболочки и вызываете соответствующий метод класса-оболочки.
Вот пример кода для вызова метода EJB из вашего проекта .NET:
//Создаем экземпляр EJB StockTrader.
localhost.StockTraderEJB trader = новый localhost.StockTraderEJB();
//Купить акцию, определенную пользователем в текстовом поле с названием акции,
//Количество купленных акций соответствует числу в текстовом поле количества акций
trader.buy(tbStockName.Text, Int32.Parse(tbNumOfShares.Text));
Углубленный анализ
выполняет запрошенный вызов J2EE в статическом конструкторе класса-оболочки, созданном выше, для создания домашнего объекта EJB. Затем в конструкторе по умолчанию он использует домашний объект для создания объекта EJB. Объект EJB хранится как член класса-оболочки, через который вызываются методы бизнес-компонента EJB.
Ниже приведена часть кода для создания класса-оболочки StockTrader EJB:
Private static Trading.StockTraderHome home;
частная торговля.StockTraderEJB ejbObj;
статический StockTraderEJB() {
// Создаем контекст именования Java (JNDI)
Контекстный контекст;
контекст = vmw.j2ee.J2EEUtils.CreateContext(null, null);
объект HomeObj;
//Получаем домашний объект с сервера JNDI
homeObj = context.lookup("ejb/StockTrader");
home = ((trading.StockTraderHome)(homeObj));
}
//Конструктор по умолчанию: создаем новый экземпляр EJB
общественный StockTraderEJB() {
this.ejbObj = home.create();
}
Этот класс-оболочка предоставляет методы удаленного интерфейса EJB через свои общедоступные методы. Затем каждый из этих методов вызывает соответствующий бизнес-метод вашего EJB через объект EJB. Следующий код демонстрирует метод биржевого трейдера в оболочке EJB:
public virtual void buy(string arg_0, int arg_1) {
this.ejbObj.buy(arg_0, arg_1);
}
public virtual void Sell(string arg_0, int arg_1) {
this.ejbObj.sell(arg_0, arg_1);
}
Visual MainWin также отвечает за сопоставление типов данных между Java и .NET. Например, если один из методов вашего EJB получает объект java.lang.calendar в качестве параметра, вы должны вызвать этот метод с параметром объекта .NET System.DateTime и сопоставить его с объектом java.lang объекта календаря. Впоследствии, если ваш метод EJB вернет класс java.lang.class, вы вместо этого получите объект System.Type.
Проблемы отладки
Несмотря на то, что Visual MainWin упрощает разработку, вам все равно может потребоваться отладка многоуровневых смешанных приложений ASP.NET/EJB. Отладчик Visual MainWin позволяет отлаживать гибридные приложения из Visual Studio .NET IDE. Вы можете установить прерывания в своем коде C# или VB.NET, перейти к коду EJB Java и отлаживать все приложение, невзирая на языковые границы. А поскольку отладка должна присутствовать везде, где возникает проблема, отладчик Visual MainWin можно подключить к вашему серверу приложений J2EE, независимо от того, работает ли он в Linux, Unix или других средах, при условии, что он может работать в отладчике. узор.
Рис. 6. Использование отладчика Visual MainWin для отладки исходного кода EJB
Приложение, которое Visual MainWin создает для вас, представляет собой стандартное приложение сервлета J2EE — его можно публиковать и управлять им через консоль диспетчера сервера приложений J2EE, как и любой другой J2EE. То же, что и сервлет. приложение. Таким образом, ваш уровень представления ASP.NET и уровень бизнес-логики EJB могут опираться на одну и ту же инфраструктуру безопасности J2EE. Ваши гибридные приложения ASP.NET/EJB могут полагаться на согласованную модель безопасности за счет использования аутентификации сервлетов J2EE, а определения пользователей и ролей вашего сервера приложений могут обеспечить безопасность за счет балансировки механизмов авторизации на основе ролей.
Резюме
1. В этой статье обсуждались удаленные объекты и интерфейсы. Также возможно использование локальных объектов через Visual MainWin. Чтобы распространять приложение, использующее собственные объекты, необходимо создать файл корпоративного архива (EAR), который содержит как файл WAR вашего приложения, так и файл JAR локального EJB.
2. Хотя Visual MainWin может сопоставлять большинство типов .NET с типами Java, он не может сопоставлять типы коллекций, поскольку такое сопоставление может привести к снижению производительности. Таким образом, вы можете обрабатывать типы коллекций Java из своего кода .NET или выполнять такие преобразования самостоятельно.
3. Visual MainWin позволяет использовать сессионные и нетранзакционные объектные компоненты. Транзакционные объектные компоненты не могут использоваться прозрачно, поэтому вам придется вручную кодировать вызовы транзакций J2EE. Однако в большинстве случаев доступ к транзакционным объектным компонентам можно получить через сеансовые компоненты, поэтому вам вряд ли понадобится это делать.