Продолжается подписка на наши издания! Вы не забыли подписаться?

Средства разработки Borland**

Александр Цимбал

Несмотря на чрезвычайно широкое распространение продуктов Borland в CCCP/России, опыт общения автора (в качестве консультанта и преподавателя) с разработчиками самой разной квалификации свидетельствует о том, что «общественное мнение» не совсем адекватно реальности. Очень кратко его можно сформулировать следующим образом: решения Borland позволяют быстро и качественно создавать приложения средней сложности с помощью программистов средней квалификации, но настоящий профессионал (что это такое – отдельный вопрос) предпочитает более сложные, гибкие и эффективные инструменты.

Как мне кажется, происходит это по следующим причинам:

Вообще, распространенные (и тщательно навязываемые) стереотипы очень сильны в такой, казалось бы, «продвинутой» и мыслящей – в том числе критически – среде, как сообщество программистов. Скорее всего, это связано с наличием большого количества разработчиков низкой и весьма средней квалификации со всеми их недостатками – узостью взглядов, категоричности суждений, проистекающей из невежества и недостаточного опыта и т.п. Очень часто доскональное знание малосущественных либо совсем несущественных деталей той или иной технологии рассматривается как вполне достаточная компенсация за неспособность выбрать наиболее оптимальный способ и инструмент для решения задачи. Объясняется это относительной простотой программирования – достаточно сравнить требования, которые предъявляются, с одной стороны, к начинающему самостоятельную научную или производственную работу физику, математику, инженеру, врачу и, с другой – к программисту.

Кроме того, в силу ряда причин профессия программиста считается – не без оснований – престижной (пусть не в России), «денежной» и все еще модной.

Примеров забавных (и не очень) несуразностей, недоразумений и заблуждений можно приводить очень много. Вот некоторые из них:

Прошу понять автора правильно – он не ставит задачу проведения рекламной кампании Borland в любой форме – в конце концов, Россия для Borland (как и для всех поставщиков средств разработки) не является хоть сколько-нибудь значимым рынком. Задача статьи совсем в другом: дать читателю информацию о том, что предлагает сейчас Borland в области средств разработки современных приложений, и, может быть, помочь разработчику с выбором конкретного инструмента для решения его проблем.

Если речь зашла о современных программных системах, то, наверное, имеет смысл сказать о них несколько слов. Какие к ним предъявляются требования – другими словами, что должны обеспечить используемые средства разработки?

Разумеется, это не значит, что в каждом конкретном случае важны все из приведенных требований.

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

Delphi

Delphi в России является, безусловно, самым распространенным и наиболее часто используемым средством разработки от Borland. Связано это, вне всякого сомнения, с тем, что Delphi была первым действительно мощным, гибким и универсальным RAD-средством для Windows на рынке – и не только в нашей стране. Спецификой России можно считать большое количество программистов, использующих в качестве своего основного языка программирования Pascal (Object Pascal, язык Delphi).

Огромный успех Delphi был предопределен наличием очень хорошей компонентной модели для создания клиентских приложений (косвенным подтверждением ее высокого качества является широкое распространение компонентной модели JavaBeans, созданной Sun совместно с Borland на основе компонентной модели Delphi). Кроме того, в комплект поставки с самого начала входили готовые компоненты для доступа к наиболее популярным SQL-серверам и локальным базам данных. Технология доступа к данным, в конце концов получившая название BDE (Borland Database Engine), в то время отвечала всем требованиям, предъявлявшимся к библиотекам такого рода. Например, BDE поддерживала многопоточный режим работы практически без усилий со стороны программиста.

Чрезвычайно интересной технологией стал MIDAS...

**Полный текст статьи вы можете найти в печатной версии журнала

<...>

Что же происходит с Delphi в настоящий момент?

Достоинство Delphi – гармоничное сочетание современного объектно-ориентированного языка, прекрасной компонентной модели для создания клиентских приложений, развитой (хотя и не самой лучшей – здесь первенство Microsoft неоспоримо) поддержки COM+, в том числе MTS и ADO, мощных средств создания Web-приложений, (в том числе серверных) и удобной среды разработки. Delphi умело прячет от разработчика многие внутренние особенности реализации (например, оператор as в некоторых случаях выполняет вызов метода IUnknown.QueryInterface). В то же время при необходимости программист может перейти на уровень использования API. Средства доступа к базам данных позволяют быстро создавать эффективные приложения для работы со всеми распространенными реляционными СУБД.

Главным недостатками, на взгляд автора, являются следующие:

Второй недостаток является тем более обидным, что он необъясним, по крайней мере, чисто с технической точки зрения. Полноценная поддержка CORBA 2.3 (на уровне создания клиентских приложений) и, следовательно, взаимодействие с J2EE/EJB для Delphi и Kylix вывела бы эти продукты на совершенно иной качественный уровень. CORBA позволяет использовать сервис распределенных транзакций JDBC не Java-приложениям.

Надо сказать, что кое-что в этом направлении сделано – программисты могут создавать CORBA-клиентов средней сложности, а после появления SIDL в составе Boland AppServer 4.5 – и EJB-клиентов. Тем не менее, в этой области остается еще очень много вопросов, и о полноценной поддержке этих технологий говорить пока не приходится.

Распространена точка зрения, что серьезным недостатком Delphi является отсутствие компонентной модели на стороне сервера. С точки зрения автора, это проблемой не является – вполне достаточно средств взаимодействия с такой мощной и универсальной компонентой моделью, как Enterprise JavaBeans.

Краткие выводы

Delphi в настоящий момент является первоклассным инструментом для быстрого и качественного создания приложений под Windows, в том числе Web-ориентированных приложений. Она является наилучшим средством (за счет современного объектно-ориентированного языка и комплексной поддержки различных технологий), если речь не идет о создании мощных серверных приложений, не ориентирующихся на технологии Microsoft.

В то же время, Delphi все больше и больше начинает отставать от C++ Builder и JBuilder с точки зрения мощи и открытости. Пожалуй, по совокупности своих возможностей Delphi является самым слабым из средств создания приложений, предоставляемых Borland. Тем не менее, чисто технических препятствий для «доведения» Delphi (и Kylix) до уровня своих «братьев» – C++ Builder и JBuilder – практически не существует. Хотелось бы надеяться, что это будет сделано в ближайшее время.

C++ Builder

Прежде всего должен признаться, что разговор о C++ Builder связан для меня с некоторыми неприятными вещами. Я – давний поклонник и C++, и Borland, поэтому мне очень обидно, что данный программный инструмент не может занять подобающего ему места просто по халатности разработчиков и инженеров контроля качества Borland.

C одной стороны, можно сказать, что C++ Builder умеет все то же, что и Delphi, а кроме того, полноценно поддерживает CORBA. Набор технологий, которые поддерживает этот продукт, позволяет создавать самый широкий спектр приложений...

**Полный текст статьи вы можете найти в печатной версии журнала

<...>

Kylix

В настоящее время трудно подробно анализировать достоинства и недостатки этого инструмента – поставки его должны начаться в конце февраля – начале марта. Первая версия обеспечивает создание приложений для Linux (Red Hat 6.2, Mandrake 7.2 и SuSE 7.0) с использованием языка Delphi. Поддержка C++ будет добавлена несколько позднее. Для разработчиков клиент-серверных систем важны следующие характеристики: поддержка взаимодействия с Oracle, DB2 и Interbase c использованием компонентов DataCLX и технологии DbExpress, а также поддержка создания серверных Web-приложений, ориентированных на использование Apache (компоненты NetCLX). Это особенно интересно, если принять во внимание, какое количество Web-серверов работает в настоящее время на Linux под управлением Apache.

Говорить о реальной многоплатформенности Delphi пока все же рано...

**Полный текст статьи вы можете найти в печатной версии журнала

<...>

JBuilder

JBuilder в настоящий момент является наиболее мощным средством создания приложений среди всех продуктов Borland – а может быть, и самым мощным средством создания клиент-серверных приложений вообще. Не думаю, что это утверждение слишком сильное. Дело здесь не в только в высочайшем качественном уровне этого продукта – дело и в той особой роли, которую в настоящий момент играют технологии, основанные на Java...

<...>

VisiBroker, AppServer и AppCenter

Все эти продукты к средствам разработки можно отнести весьма условно. Тем не менее, они играют в комплексе Borland’овских технологий очень важную роль...

**Полный текст статьи вы можете найти в печатной версии журнала

<...>

Borland Enterprise Studio

В середине февраля Borland объявил о создании комплекса средств создания распределенных и Web-приложений на Java – Enterprise Studio Java Edition. Этот пакет работат только под Windows. В него входят:

Пакет позволяет создавать приложения, начиная с уровня CASE-диаграмм и языка UML. Подробное рассмотрение его возможностей вы можете найти по адресу www.borland.com/estudio/java/esje/feamatrix.

Пример совместного использования Enterprise JavaBeans и C++.

Мы рассмотрим не совсем традиционное использование компонентов EJB. Они предназначены для создания серверных приложений, но интересно посмотреть, как они справятся с ролью клиента.

Такой подход интересен по двум соображениям:

Серверное приложение создавалось с использованием C++ Builder 5 и VisiBroker for C++ 4.1.

Одним из наиболее существенных моментов является доступ к экземпляру службы имен (Naming Service), общему для C++-сервера и EJB-клиента. Такой экземпляр запускается в составе сервера EJB – в нашем случае, в составе Borland AppServer 4.5. Администратор может явно выбрать имя фабрики контекстов (рисунок 7).

Рис.7. Задание имени фабрики контекстов

Ниже приведены IDL-объявления и код серверного приложения:

IDL-файл:
module MyModule 
{
  interface MyInterface 
  {
    long MyMethod (in long arg);
  };
};
Файл MyImpl.h:
#include <corbapch.h>
#pragma hdrstop
#include "MyIDL_File_s.hh"

class MyInterface_Impl : public POA_MyModule::MyInterface 
{
public:
   virtual CORBA::Long MyMethod(CORBA::Long _arg) throw(CORBA::SystemException);
};
Файл MyImpl.cpp:
#include "MyImpl.h"

CORBA::Long MyInterface_Impl::MyMethod(CORBA::Long _arg)
throw(CORBA::SystemException)
{
    return _arg + 1;
}
Файл Server.cpp:
#include <corbapch.h>
#include <corba.h>
#include <condefs.h>
#include <CosNaming_c.hh>
#include <CosNamingExt_c.hh>

#include "MyImpl.h"

main(int argc, char* argv[])
{
   try
   {
      CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);

      CORBA::Object_var rpObj = orb->resolve_initial_references ("RootPOA");
      PortableServer::POA_var rootPoa  = PortableServer::POA::_narrow (rpObj);

      PortableServer::POAManager_var poaMngr = rootPoa->the_POAManager();

      CORBA::PolicyList policyList;
      policyList.length(1);
      policyList[0] = 
                 rootPoa->create_lifespan_policy (PortableServer::PERSISTENT);
      PortableServer::POA_var myPOA =
                        rootPoa->create_POA ("MyPOA", poaMngr, policyList);
      MyInterface_Impl servant;
      PortableServer::ObjectId_var objID =
                          PortableServer::string_to_ObjectId ("MyObject");

      myPOA->activate_object_with_id (objID, &servant);
      poaMngr->activate();

      //  Регистрация в Naming Service

      CORBA::Object_var nsv;
      CosNaming::NamingContextExt_var rootN;
      try
      {
         nsv = orb->resolve_initial_references ("NameService");
         rootN = CosNaming::NamingContextExt::_narrow (nsv.in());
         if (CORBA::is_nil(rootN))
         {
            Cout << "исходный Naming Context не найден!" << endl;
         }

         CosNaming::Name_var oc = rootN->to_name ("OtherContext");
         rootN->rebind (oc, myPOA->servant_to_reference(&servant));
      }
      catch (const CORBA::Exception& e) 
      {
         Cout << "Ошибка инициализации Naming Service" << endl;
      }

      Cout << "Готов получать запросы...";
      orb->run();
   }
   catch(const CORBA::Exception& e)
   {
      Cerr << e << endl;
      return(1);
   }
   return 0;
}

После его запуска объектная ссылка, сопоставленная с именем "OtherContext", будет зарегистрирована в экземпляре службы имен, имя фабрики которого в примере было указано в командной строке при запуске серверного приложения (рисунок 8).

Рис.8. Диалог параметров запуска

Перейдем к созданию клиентского EJB-компонента. Его код почти целиком генерируется экспертами JBuilder. Ниже приведен бизнес-метод компонента, написанный «вручную»:

package EJBclient_CPPserver;

import java.rmi.*;
import javax.ejb.*;
import EJBclient_CPPserver.MyModule.*;

public class EJBclient implements SessionBean 
{
   ...
   public int CPP_server_method (int arg)
   {
      int retValue = 0;
      try
      {
         javax.naming.Context ctxt = new javax.naming.InitialContext();
         java.lang.Object obj = ctxt.lookup("OtherContext");
         MyInterface oRef = 
            MyInterfaceHelper.narrow ((org.omg.CORBA.Object)obj);
//         MyInterface oRef = (MyInterface)
//               javax.rmi.PortableRemoteObject.narrow 
//               (obj, MyInterface.class);
         retValue = oRef.MyMethod( arg);
      }
      catch (Exception e) { e.printStackTrace(); }
      return retValue;
   }
}

Разумеется, в проект был включен IDL-файл, использованный при создании C++-сервера. Классы и интерфейсы MyInterface, MyInterfaceHelper и др. были сгенерированы компилятором idl2java.

Рис.9. Открытие свойств EJB-компонента

Разработчик может использовать как «чисто CORBA-стиль» для выполнения преобразования к нужному типу объектной ссылки на серверный C++-объект, так и «Java-оболочку» для сокрытия этого стиля и работы на уровне EJB (закомментированный в примере оператор). Результат будет один и тот же.

Рис.10. Свойства EJB-компонента / генерация IDL

Для того, чтобы бизнес-метод (или методы) серверного C++-объекта вызывались в контексте транзакции (возможно, начатой контейнером EJB), нужно сделать IDL-интерфейс MyInterface производным от интерфейса CosTransactions::TransactionalObject, который не объявляет никаких методов:

#include CosTransactions.idl

module MyModule 
{
   interface MyInterface : CosTransactions::TransactionalObject 
   {
      long MyMethod (in long arg);
   };
};

Написание С++-клиента для созданного EJB-компонента не представляет ни труда, ни интереса. Нужно просто на основе home-интерфейса EJB-компонента сгенерировать соответствующий idl-файл (рисунок 10).

Стандартный компилятор java2idl сгенерирует idl-файл, на основе которого компилятор idl2cpp создаст все необходимое для написания клиентского приложения. Разумеется, клиент для получения объектной ссылки на home-интерфейс EJB-компонента должен обратиться к экземпляру службы имен, где она опубликована.

Обратите внимание, что ссылка на home-интерфейс компонента (EJBclient в нашем примере) опубликована дважды – один раз в начальном контексте, а второй – в контексте sidl. Первая предназначена для создания клиентских приложений с использованием CORBA 2.3, вторая – для более ранних версий CORBA, которые еще не поддерживали спецификацию ObjectByValue. При использовании продуктов Borland надобности в SIDL-спецификации обычно не возникает – и С++ Builder (VisiBroker 4.1), и JBuilder (VisiBroker 4.5) поддерживают CORBA 2.3. Есть все основания считать, что Delphi 6 также сможет взаимодействовать с VisiBroker for C++ 4.1.

Рис.11. Консоль AppServer

Выводы

Уже сейчас Borland предоставляет спектр инструментов, которые способны быстро и качественно создавать клиент-серверные, в том числе распределенные, системы, функционирующие на различных аппаратных платформах и под управлением различных операционных сред. Компания ставит задачу теснейшей интеграции средств разработки – Delphi, C++ Builder, JBuilder, компонентных оболочек (AppServer) и средств контроля функционирования систем (AppCenter) в единую многоплатформенную среду. Программисты на Java могут насладиться ее реальными достоинствами уже сейчас.

**Полный текст статьи вы можете найти в печатной версии журнала

Copyright © 1994-2016 ООО "К-Пресс"