Программирование с использованием технологий Java и PHP в AIX версии 5.3: Часть 5. Инсталляция и интегрирование PHP Java Bridge

В AIX возможна разработка приложений, применяющих как технологию Java, так и PHP. Пятая часть этого руководства познакомит вас с инсталляцией, настройкой и интегрированием PHP Java Bridge на сервер приложений Tomcat, после чего всё будет готово для разработки Web-интерфейса на PHP.

Дуг Монро, консультант по системному администрированию, DMA Inc.

Дуг Монро (Doug Monroe) работает консультантом и преподавателем по системному администрированию UNIX в DMA Inc. Он обладает степенью бакалавра компьютерных наук, полученной в Университете штата Орегон (Oregon State University), и обеспечивает поддержку различных UNIX-систем с 1984 года. Связаться с ним можно по электронной почте monroe@sqnt.com.



Мартин Браун (Martin C. Brown) , Внештатный автор и консультант компании MCslp, Свободный писатель

Мартин Браун – бывший руководитель IT подразделения с опытом работы в области межплатформенной интеграции. Обладая большим опытом разработчика, он создал динамические сайты для множества крупных клиентов, включая HP и Oracle, и на данный момент является техническим директором ресурса Foodware.net. В настоящее время Мартин в качестве внештатного автора и консультанта сотрудничает с корпорацией Microsoft, работает редактором (LAMP Technologies Editor) журнала LinuxWorld, является видным членом группы AnswerSquad.com. Его перу принадлежат книги на совершенно разные темы: от сертификации Microsoft, компьютеры iMac до программирования открытого исходного кода. При всем этом он продолжает плодотворно работать в области программирования для разных платформ и сред. Связаться с Мартином можно посредством его персонального Web-сайта по адресу http://www.mcslp.com.



01.06.2011

Об этой серии

PHP — самый популярный язык Web-разработки, а технологии Java™ широко применяются в программировании бизнес-приложений. Чтобы использовать сильные стороны обоих языков в операционной системе AIX® версии 5.3 был разработан PHP Java Bridge. Эта серия статей поможет разработчикам AIX 5.3 интегрировать такие технологии, как PHP и Java, в процесс разработки Web-приложений.

В качестве примера разработки мы создадим простую программу-опросник. Типичный процесс разработки состоит из следующих шагов.

  • Разработка основного Java-приложения
  • Представление стандартного Java-приложения как Web-приложения на базе Java с помощью сервлетов
  • Включение возможности хранения информации в базе данных
  • Представление исходного приложения как Web-службы и оснащение его PHP-интерфейсом
  • Переработка PHP-интерфейса с помощью специализированного PHP Java Bridge

Эта серия статей состоит из шести частей.

  • Часть 1 рассматривает приложение, создание рабочей среды для постройки Java-приложений и размещения написанных на Java Web-приложений на сервере Tomcat
  • Часть 2 рассказывает о самом коде основного приложения и о разработке простого Java-сервлета для предоставления Web-интерфейса информации
  • В части 3 исходное приложение подключается к базе данных DB2® для хранения опросов и их результатов
  • В части 4 исходное приложение конвертируется в приложение, к которому возможен доступ как к Web-службе, а также рассказывается об основах формирования PHP-интерфейса
  • Часть 5 рассказывает, как построить PHP-интерфейс для Java-приложения с помощью PHP Java Bridge
  • Часть 6 освещает вопросы перепрограммирования приложения для использования PHP Java Bridge в качестве замены интерфейсу Web-службы

Пересматриваем Web-сервис

В четвертом выпуске этой серии (см. раздел « Ресурсы») мы усовершенствовали изначальное Java-приложение и предоставили к нему доступ через Web-сервис,что имеет немало преимуществ, и главное из них — улучшение функциональной совместимости.

Web-службы совместимы с огромным количеством платформ, языков и рабочих сред. Предоставив доступ к приложению через Web-службу, мы можем обращаться к нему практически с любой машины и на самых разных языках, включая Perl, Python, JavaScript, Java и, конечно, PHP.

Web-службы предоставляют свои функции с помощью URL — например, методом getSurveyQuestionCountReponse(). И тогда можно закодировать информацию, отправляемую на сервер и возвращаемую клиентом, как XML-сообщение.

Лучше всего убедиться в этом непосредственно, обратившись к Web-службе, установленной на сервере Web-служб Axis. Например, обратившись к http://localhost:8080/axis/services/SQWSSOAP?method=getSurveyQuestionCount URL, мы получим в ответ xml-сообщение от службы Simple Object Access Protocol (SOAP), воспроизведенное на листинге 1.

Листинг 1. XML-сообщение, возвращенное службой SOAP
<soapenv:Envelope>
  <soapenv:Body>
    <getSurveyQuestionCountResponse>
      <out>2</out>
    </getSurveyQuestionCountResponse>
  </soapenv:Body>
</soapenv:Envelope>

Как правило, такие же сведения можно получить с помощью любого клиента SOAP. В листинге 2 мы видим простой и функционально совместимый клиент на Perl.

Листинг 2. Простой клиент на Perl
use SOAP::Lite;

my $client = SOAP::Lite->new(proxy =>
             'http://localhost:8080/axis/services/SQWSSOAP');

print "Questions: ",$client->getSurveyQuestionCount()->result,"\n";

Процесс, отображенный в листинге 3 , точно так же работает и в PHP — установка удалённой конечной точки для базы Web-службы. Нужно только вызвать соответствующую удалённую службу, чтобы получить количество пунктов в опросе.

Листинг 3. Установка удалённой конечной точки в PHP
<?
require_once('nusoap.php');

$client=new soapclient('http://localhost:8080/axis/services/SQWSSOAP');

if (isset($fault)) {
        print "Error: ". $fault;
}

$count = $client->call('getSurveyQuestionCount',array());
print "Questions: " . $count  . "\n";
?>

Функциональная совместимость Web-служб в такой ситуации очень ценна. Чтобы достичь основной цели, т.е. создать усовершенствованную Web-оболочку для своего приложения, мы теперь сможем использовать множество источников, другие приложения и рабочие среды. Процессы создания нового сетевого подключения и преобразования SOAP-сообщения в XML и обратно — это дополнительная нагрузка для приложения и рабочей среды, поэтому нам нужно быть быстрыми, насколько это возможно.

А нагрузка при обработке запросов таким способом может быть весьма значительной. При создании SOAP и других технологий удаленного вызова процедур (Remote Procedure Call, RPC) вопросы производительности не были главными. Ключевыми элементами были совместимость, способность к взаимодействию и соответствие стандартам открытого ПО.

Одна из основных задач этой серии руководств — показать пример разработки эффективного Web-интерфейса для Java-приложения. Созданная нами программа была сравнительно несложной, но нетрудно представить, что при ее использовании понадобится обрабатывать сотни запросов в секунду. Конечно, любому хотелось бы достичь максимальной производительности, но имейте в виду, что используя доступ к приложению на Java посредством службы SOAP и с клиентом на PHP, нельзя добиться приемлемой скорости.

Альтернатива — PHP Java Bridge

PHP Java Bridge — это оптимизированный протокол на основе XML, который позволяет напрямую использовать классы Java из PHP-приложений. Хотя принцип его работы аналогичен SOAP, но фактически он намного эффективнее.

Система работает через интерфейс JSR 223. Компонент PHP способен взаимодействовать с любой системой на основе ECMA-335, включая технологии Java, расширения Java-интерфейса (такие, как JPython и JRuby), приложения NET, использующие CLR (Common Language Runtime) и даже такие NET-совместимые решения, как Mono.

Процесс двусторонний: PHP-скрипт может вызвать класс Java/.NET, или же Java-компонент может вызвать класс или скрипт PHP. "Мост" даже можно интегрировать в программу, что даёт возможность серверной части (Apache/IIS и PHP, или .NET, или Java/Tomcat) стартовать автоматически при вызове класса.

В основе системы лежит доступ к удаленным классам на сервере приложений Tomcat. При запуске PHP-приложения оно загружает код PHP Java Bridge с удаленного сервера Java-приложений, что запускает систему и информирует скрипт PHP о том, как нужно взаимодействовать с удалёнными классами Java на сервере приложений.

Очевидно, что для того чтобы получить доступ к Java-классам с помощью PHP Java Bridge, необходимо перед установкой PHP Java Bridge сначала установить Apache и PHP.

Инсталляция Apache httpd

Чтобы инсталлировать Apache httpd, потребуется:

  1. Компилятор языка C и исходные коды Apache httpd. Если в системе нет компилятора, можно загрузить GNU-компилятор в rpm-формате с сайта IBM (см. раздел «Ресурсы»). Также затем понадобятся следующие модули с этого сайта (листинг 4):
    Листинг 4. Необходимые модули
      gcc V4.0.0 for AIX V5.3 (gcc-4.0.0-1.aix5.3.ppc.rpm)
    gcc-c++ V4.0.0 for AIX V5.3 (gcc-cplusplus-4.0.0-1.aix5.3.ppc.rpm)
    libgcc V4.0.0 for AIX V5.3 (libgcc-4.0.0-1.aix5.3.ppc.rpm)
    libstdc++ V4.0.0 for AIX V5.3 (libstdcplusplus-4.0.0-1.aix5.3.ppc.rpm)
    libstdc++-devel V4.0.0 for AIX V5.3 
    (libstdcplusplus-devel-4.0.0-1.aix5.3.ppc.rpm)
    
    make v3.80 (make-3.80-1.aix5.1.ppc.rpm)
    bison v1.875 (bison-1.875-3.aix5.1.ppc.rpm)
    bzip v1.0.2 (bzip2-1.0.2-3.aix5.1.ppc.rpm)
    expat v1.95.7 (expat-1.95.7-4.aix5.1.ppc.rpm)
    flex v2.5.4a (flex-2.5.4a-6.aix4.3.ppc.rpm)
    freetype2 v2.1.7 (freetype2-2.1.7-5.aix5.1.ppc.rpm)
    libjpeg v6b (libjpeg-6b-6.aix5.1.ppc.rpm)
    libpng v1.2.8 (libpng-1.2.8-5.aix5.1.ppc.rpm)
    xpm v3.4k (xpm-3.4k-7.aix5.1.ppc.rpm)
    zlib v1.2.3 (zlib-1.2.3-3.aix5.1.ppc.rpm)
  2. Загрузим их на нашу систему и, получив привилегии супер-юзера, установим каждый следующими командами (пример для gcc):
    # rpm –Uvh gcc-4.0.0-1.aix5.3.ppc.rpm

    Если немного подумать, то можно установить все за один раз с помощью скрипта оболочки:
    # for I in *.rpm; do
    rpm –Uvh $I
    done
  3. Необходимо установить также Base Application Development Math Library (bos.adt.libm) из дистрибутива AIX (если еще не установлено). Для этого можно воспользоваться утилитой smit.
  4. После всего этого загрузим исходный код Apache 2.2.2 (httpd-2.2.2.tar.gz) по адресу http://archive.apache.org/dist/httpd/.
  5. Распакуем архив:
    # gunzip –C httpd-2.2.2.tar.gz | tar xvf -

    Перейдем в каталог с распакованным архивом, запустим конфигурационный скрипт, скомпилируем его и инсталлируем:
    # cd httpd-2.2.2
    # ./configure -C –enable-so –prefix=/usr/local/apache2
    # make
    # make install

В результате Apache httpd будет инсталлирован в /usr/local/apache2. Более подробно этот процесс, а также настройка httpd, освещены в прекрасной статье Нигеля Гриффитса на AIX Wiki (см. раздел «Ресурсы»).

Описание настройки Apache и Web-серверов выходит за пределы нашей статьи. Полезную информацию по конфигурированию базового варианта Apache можно найти по ссылкам в разделе "Ресурсы".

Инсталляция PHP

Нам нужно инсталлировать PHP из исходного кода. Для этого выполним следующие операции.

  1. Загружаем исходный код PHP V5.2.3 с Web-сайта PHP (см.раздел «Ресурсы»).
  2. Распаковываем архив с PHP:
      # gunzip –c php-5.2.3.tar.gz | tar –xf –
  3. Перейдем в каталог с распакованным архивом PHP:
    # cd php-5.2.3
  4. Теперь запустим скрипт configure, указав расположение команды apxs2. Команда apxs2/opt/ сообщает конфигурационному скрипту PHP сведения о расположении Apache и необходимых параметрах конфигурации PHP:
    # ./configure –with-apx2=/usr/local/apache2/bin/apxs
  5. Как только configure закончит работу, запустим make, чтобы собрать PHP. Поскольку configure для PHP имеет открытый исходный код, make для сборки исполняемых файлов должен быть аналогичного формата:
    # /opt/freeware/bin/make
  6. Инсталлируем новые бинарники в Apache (не используя make install):
    # cp .libs/libphp5.so /usr/local/apache2/modules
    # cp php.ini-recommended /usr/local/apache2/conf/php.ini

Инсталлятор PHP должен сделать все необходимое для установки PHP. Вот теперь пора инсталлировать PHP Java Bridge.

Инсталляция PHP Java Bridge

Инсталляция PHP Java Bridge сравнительно проста и состоит из инсталляции Web-архива JavaBridge.war и некоторых модификаций работающей системы для того, чтобы убедиться в доступности "моста" с удаленного хоста.

Чтобы инсталлировать PHP Java Bridge:

  1. Загрузим пакет PHP Java Bridge package (см. раздел «Ресурсы).
  2. Распакуем содержимое пакета с помощью unzip:
    $ unzip php-java-bridge_4.2.0_j2ee.zip
  3. Скопируем Web-архив в каталог установки Tomcat:
    $ cp php-java-bridge-4.2.0_j2ee/JavaBridge.war /usr/local/tomcat/webapps/
  4. Если Tomcat запущен, то остановим и перезапустим его. В результате содержимое Web-архива будет извлечено и подготовлено к использованию ( Listing 5).
    Листинг 5. Извлечение содержимого Web-архива
    $ cd /usr/local/tomcat
    $ bin/shutdown.sh
    $ bin/startup.sh

    По умолчанию PHP Java Bridge настроен на блокировку подключений с нелокальных серверов. Это означает, что если нам понадобится развернуть приложение на нескольких серверах, то такое подключение может быть заблокировано.
  5. Чтобы сделать подключения возможными, необходимо изменить параметры приложения JavaBrige. Для этого нужно отредактировать файл web.xml в развёрнутом каталоге Web-приложения JavaBrige. Это должен быть файл webapps/JavaBridge/WEB-INF/web.xml в каталоге установки Tomcat.
  6. Чтобы обеспечить удаленный доступ к классам Java, необходимо раскомментировать следующий блок (Listing 6).
    Листинг 6. Раскомментирование блока для обеспечения удаленного доступа к классам Java
    <init-param>
      <param-name>promiscuous</param-name>
      <param-value>On</param-value>
    </init-param>
  7. Теперь необходимо остановить и перезапустить сервер Tomcat (листинг 7).
    Листинг 7. Остановка и перезапуск сервера Tomcat
    $ cd /usr/local/tomcat
    $ bin/shutdown.sh
    $ bin/startup.sh

Тестирование инсталляции PHP Java Bridge

Инсталлированный PHP Java Bridge работает за счет импортирования файла PHP include непосредственно с удаленного сервера Java-приложений. К сожалению, так же, как PHP Java Bridge по умолчанию не поддерживает удаленный доступ, так и установленный PHP по умолчанию не разрешает удаленное включение файлов, поскольку это создает потенциальную угрозу безопасности.

Для управления этой функцией отредактируем файл php.ini. Копия этого файла должна быть в /usr/local/lib/php.ini. Если ее там нет, то копию файла можно найти в исходных текстах PHP. Файл php.ini-recommended будет лучшей основой для нового конфигурационного файла.

Необходимо активизировать два конфигурационных параметра PHP: allow_url_fopen, который позволяет открыть удаленный файл так, как если бы он был локальным, и allow_url_include, который позволяет включать удаленные PHP-файлы для импорта кода.

Первый параметр находится в секции под названием Fopen wrappers, как показано в листинге 8.

Листинг 8. Секция Fopen wrappers
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
allow_url_fopen = On
allow_url_include = On

Изменим значение параметра на On и добавим опцию allow_url_include option.

После того как все будет настроено, перезапустите Apache:

$ /usr/local/apache2/bin/apachectl restart

Теперь на Web-сервере создаем файл, показанный в листинге 9.

Листинг 9. Создание файла на Web-сервере
<?

require_once("http://sulaco.mcslp.pri:8080/JavaBridge/java/Java.inc");

$System = new Java("java.lang.System");

print_r($System->getProperties());

?>

Первая строка — доступ к удаленному PHP Java Bridge, запущенному на сервере приложений Tomcat. В результате загрузки файла include непосредственно с сервера необходимым классам становится известно, с каким сервером будет организовано взаимодействие для доступа к классам Java.

Вторая строка в листинге 9 создает новый экземпляр класса Java как PHP-объект. В данном случае мы использовали класс java.lang.System, который применяется для вывода свойств инсталляции Java.

Последняя строка выводит сконфигурированные свойства.

Теперь, если обратиться к PHP-скрипту на Web-сервере Apache, должен получиться вывод, подобный отображенному в листинге 10.

Листинг 10. Вывод
[[o:Properties]:"{java.runtime.name=Java(TM) 2 
Runtime Environment, Standard Edition,
 sun.boot.library.path=/usr/local/lib:/usr/local/apr/lib:/
 System/Library/Frameworks/
    JavaVM.framework/Versions/1.5.0/Libraries, 
    java.vm.version=1.5.0_07-87, 
	shared.loader=, awt.nativeDoubleBuffering=
	true, gopherProxySet=false, 
	java.vm.vendor="Apple Computer, Inc.",
	 java.vendor.url=http://apple.com/, 
	path.separator=:, tomcat.util.buf.StringCache.
	byte.enabled=true,
	java.util.logging.config.file=/Data/Dev/
	apache-tomcat-6.0.10/
	conf/logging.properties,
	java.vm.name=Java HotSpot(TM) Client 
	VM, file.encoding.
	pkg=sun.io, user.country=US, 
	sun.os.patch.level=unknown, java.vm.specification.
	name=Java Virtual Machine 
	Specification, user.dir=/Data/Dev/apache-tomcat-6.0.10, 
	java.runtime.version=
	1.5.0_07-164, java.awt.graphicsenv=apple.awt.
	CGraphicsEnvironment, java.endorsed.
	dirs=/Data/Dev/apache-tomcat-6.0.10/endorsed, 
	os.arch=i386, java.io.tmpdir=/Data/
	Dev/apache-tomcat-6.0.10/temp, line.separator= ,
	 java.vm.specification.vendor=Sun 
	Microsystems Inc., java.naming.factory.url.pkgs=
	org.apache.naming, java.util.
	logging.manager=org.apache.juli.ClassLoaderLogManager, 
	os.name=Mac OS X, sun.jnu.
	encoding=MacRoman,java.library.path=/usr/local/lib:
	/usr/local/apr/lib:.:/Library/
	Java/Extensions:/System/Library/Java/Extensions:
	/usr/lib/java, java.specification.
	name=Java Platform API Specification, java.class.
	version=49.0, sun.management.
	compiler=HotSpot Client Compiler, os.version=10.4.9, 
	http.nonProxyHosts=mcslp.pri|
	*.mcslp.pri|192.168.0.1|sendit.com|*.sendit.com, user.
	home=/Users/mc, catalina.
	useNaming=true, user.timezone=Europe/London, java.awt.
	printerjob=apple.awt.
	CPrinterJob, file.encoding=MacRoman, java.specification.
	version=1.5, catalina.home=/
	Data/Dev/apache-tomcat-6.0.10,java.class.path
	=:/Data/Dev/apache-tomcat-6.0.10/bin/
	bootstrap.jar:/Data/Dev/apache-tomcat-6.0.10
	/bin/commons-logging-api.jar:/System/
	Library/Frameworks/JavaVM.framework/Versions
	/1.5.0/Classes/.compatibility/
	14compatibility.jar,user.name=root, java.naming.
	factory.initial=org.apache.naming.
	java.javaURLContextFactory,package.definition
	=sun.,java.,org.apache.catalina.,
	org.apache.coyote.,org.apache.tomcat.,org.apache.jasper., 
	java.vm.specification.
	version=1.0, java.home=/System/Library/Frameworks/
	JavaVM.framework/Versions/1.5.0/
	Home, sun.arch.data.model=32, user.language=en,
	 java.specification.vendor=Sun 
	Microsystems Inc., awt.toolkit=apple.awt.CToolkit,
	 java.vm.info=mixed mode, sharing, 
	java.version=1.5.0_07,java.ext.dirs=/Library/Java/
	Extensions:/System/Library/Java/
	Extensions:/System/Library/Frameworks/JavaVM
	.framework/Versions/1.5.0/Home/lib/ext,
	sun.boot.class.path=/System/Library/Frameworks/
	JavaVM.framework/Versions/1.5.0/
	Classes/classes.jar:/System/Library/Frameworks/
	JavaVM.framework/Versions/1.5.0/
	Classes/ui.jar:/System/Library/Frameworks/
	JavaVM.framework/Versions/1.5.0/Classes/
	laf.jar:/System/Library/Frameworks/JavaVM.framework/
	Versions/1.5.0/Classes/
	sunrsasign.jar:/System/Library/Frameworks/JavaVM.framework/
	Versions/1.5.0/Classes/
	jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/
	1.5.0/Classes/jce.jar:/
	System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/
	Classes/charsets.jar, 
	server.loader=, java.vendor=Apple Computer, Inc., 
	catalina.base=/Data/Dev/
	apache-tomcat-6.0.10, file.separator=/, java.vendor.url.
	bug=http://developer.
	apple.com/java/, common.loader=${catalina.home}/lib,
	${catalina.home}/lib/*.jar, 
	sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian
	=little, mrj.version=1040.1.5.0
	_07-164, socksNonProxyHosts=mcslp.pri|*.mcslp.
	pri|192.168.0.1|sendit.com|
	*.sendit.com, package.access=sun.,org.apache.catalina.,
	org.apache.coyote.,org.apache.
	tomcat.,org.apache.jasper.,sun.beans., ftp.nonProxy
	Hosts=mcslp.pri|*.mcslp.pri|
	192.168.0.1|sendit.com|*.sendit.com, sun.cpu.isalist=}"]

Хотя из приведённого выше вывода это может быть и не вполне понятно, но мы только создали экземпляр Java-кода внутри PHP, а затем произошла реализация метода getProperties() этого кода. Исполнение кода происходило в стиле PHP, несмотря на то что в результате произошло исполнение Java-класса. Более того, сам Java-класс находился на удаленном сервере, по крайней мере, так могло быть, если бы мы этого захотели.

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

Итоги

В этой статье мы рассмотрели, как можно получить доступ к развёрнутым на основе SOAP Java-классам, созданным нами в четвертой части. Процесс создания интерфейса Web-службы отнюдь не прост; однако такой интерфейс позволяет получить доступ к информации с помощью любого клиента Web-служб.

Web-службы сохраняют определённое значение, но если вам нужно высокопроизводительное решение, тогда маршрутизации с помощью Web-служб должна найтись альтернатива, и одна из них — PHP Java Bridge. Хотя установка PHP Java Bridge сложна, но однажды настроенный, сам по себе код для доступа к удалённым классам Java работает гораздо эффективней. Для доступа к удалённому Java-классу нужны только три строки, а для достижения той же цели с использованием Web-служб и PHP-клиента их понадобилось несколько сотен.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


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


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

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

 


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

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

Выберите имя, которое будет отображаться на экране



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

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

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

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

 


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


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX, Технология Java
ArticleID=676670
ArticleTitle=Программирование с использованием технологий Java и PHP в AIX версии 5.3: Часть 5. Инсталляция и интегрирование PHP Java Bridge
publish-date=06012011