div.main {margin-left: 20pt; margin-right: 20pt} Java - язык из кофеварки
Александр Смысловский
Java - один из самых популярных языков программирования наряду с
такими "старожилами", как С, Basic, Pascal, и в то же время самый молодой
среди них. Мало того, Java де-факто стал стандартом разработки программ
для Internet.
Такая популярность в первую очередь - следствие больших надежд,
возложенных на Java крупнейшими софтовыми фирмами. Ведь все эти гиганты
(IBM, Symantec, Microsoft, Oracle, Sybase, DEC, Borland/Inprise, Netscape) так или иначе
переориентировались на использование Java: были созданы средства
разработки, компиляторы, серверное ПО, поддерживающее Java и т. д.
Другой, не менее важный фактор - поддержка Java программистами и
пользователями. Главный принцип языка "написано однажды - работает везде"
привлек многих программистов, которые распространяют программы по Internet
и хотят, чтобы они работали на компьютерах любой архитектуры и с любой
операционной системой. Пользователи, обменивающиеся данными по Internet,
хотят, чтобы их файлы адекватно отображались программами корреспондентов.
А для этого опять же имеет смысл применять одно и то же программное
обеспечение...
Но для того, чтобы Java стал настолько привлекательным, над ним долго
работала группа специалистов компании Sun Microsystems.
Как все начиналось?
В 1991 г. компания Sun Microsystems начала осуществление проекта по
созданию "умных" электронных приборов для пользователей с условным
названием "Green". Для поддержки этого проекта инженером фирмы Sun
Джеймсом Гослингом (James Gosling) был создан новый
объектно-ориентированный язык, получивший название Oak. Нужен был язык
программирования устройств типа сотовых телефонов или телевизионных
управляющих систем. Вместо предварительного программирования таких
устройств до момента отправки их с завода-изготовителя, программы на этом
языке могли быть загружены в любой момент по мере необходимости. Упор
делался на электронную бытовую технику будущего - телевизоры, телефоны,
аудио- и видеомагнитофоны, вплоть до микроволновых печей и кухонных
комбайнов, снабженных простейшими процессорами и небольшим объемом
оперативной памяти. Предполагалось сделать все эти устройства легко
программируемыми и заставить обрабатывать любые потоки информации.
Первое время разработчики планировали адаптировать для своих целей язык
С, но очень скоро стало ясно, что для удовлетворения потребностей самого
разного аппаратного обеспечения необходимо отказаться от прямой адресации
памяти и использования указателей. Перед Гослингом встала непростая задача
- в короткие сроки создать простой и высокопродуктивный язык
программирования, позволяющий решать самый широкий круг задач. Новый язык
сохранил много сходства с С++, но стиль программирования претерпел
множество изменений. Язык стал полностью объектным - любые типы данных,
включая даже такие простые, как целое число, были представлены
соответствующими классами. Требования универсальности привели к воплощению
в этом проекте множества новаторских идей, включая массу возможностей при
работе с интерфейсами объектов и автоматизацию управления динамической
памятью.
В 1993 г. компания Sun подготовила прототип системы удаленного
управления с использованием этой технологии, однако возникли некоторые
проблемы с поддержкой технологии другими производителями. В довершение
всего оказалось, что слово Oak уже использовалось ранее в качестве
торговой марки.
В 1994 г. сеть Internet и WWW-сервис получили бурное развитие. Группа
разработчиков Oak начала реализовывать технологию, которая могла бы
применяться в ней. Решено было начать работу с новым Web-броузером,
который мог бы показать разработки с наилучшей стороны. Было также дано
новое название создаваемому языку - Java (жаргонное название кофе,
напитка, который многие инженеры пьют ежедневно).
Броузер, получивший название HotJava, был первым продуктом, полностью
написанным на Java и способным автоматически загружать и запускать
Java-программы. Броузер HotJava повысил интерес к использованию языка Java
на Web, и многие компании приобрели лицензию на право использования языка
Java в своих разработках. Некоторые из компаний по производству бытовых
электронных приборов, сотрудничавшие с фирмой Sun еще в рамках проекта
"Green", также обратились в фирму за лицензией на язык Java.
Язык Java обрел такую популярность, что 9 января 1995 г. фирма Sun
запустила новый бизнес-проект, названный JavaSoft, который был
сконцентрирован на развитии Java. Основными составляющими технологии Java
стали: язык программирования, виртуальная машина и прикладной программный
интерфейс.
Своим успехом этот язык обязан в первую очередь компании Netscape
Communications, которая внедрила интерпретатор Java в новую версию своего
продукта Netscape Navigator 2.0 (после чего этот броузер в начале 1996 г.
стал самым популярным). 1995 г. можно считать годом рождения языка Java и
начала его триумфального шествия по миру. Нарисованная быстрым росчерком
кисти художника чашечка горячего ароматного кофе стала официальной
эмблемой JavaSoft, и "кофейный аромат" стал визитной карточкой во всех
технологических разработках этого подразделения Sun Microsystems.
Язык и технология
В узком смысле слова Java - это объектно-ориентированный язык
программирования, внешне напоминающий C++, но более простой для освоения и
использования. В более широком смысле - это целая технология
программирования, изначально рассчитанная на интеграцию с Web-сервисом, т.
е. на использование в сетевой среде. Поскольку броузеры существуют
практически для всех аппаратно-программных платформ, Java-среда должна
быть как можно более мобильной, в идеале полностью независимой от
платформы.
Java на потребительских
платформах |
Потребительские устройства можно разделить на
несколько категорий в соответствии с их функциональными
возможностями:
простейшие: смарт-карты, игровые приставки;
самостоятельные устройства: принтеры, цифровые фото- и
видеокамеры, электронные секретари, младшие модели сотовых
телефонов, пейджеры, факсимильные аппараты и др.;
устройства с открытым подключением: сетевые компьютеры и
устройства других типов, обеспечивающие доступ в Internet.
Для этих категорий в Java-технологии определены
"встроенные" стандарты языка и прикладного программного
интерфейса, а именно:
для простейших - Java Card;
для самостоятельных - EmbeddedJava;
для устройств с открытым подключением - PersonalJava.
| |
С целью решения перечисленных проблем компанией Sun были приняты,
помимо интеграции с броузером, два других важнейших постулата.
1. Специфицирована виртуальная Java-машина, на которой должны
выполняться (интерпретироваться) Java-программы. Определены ее
архитектура, представление элементов данных и система команд. Исходные
Java-тексты транслируются в коды этой машины. Поэтому при появлении новой
аппаратно-программной платформы в переносе будет нуждаться только
Java-машина; все программы, написанные на Java, пойдут без изменений.
2. Определено, что при редактировании внешних связей Java-программы и
при работе броузером может осуществляться прозрачный для пользователя
поиск необходимых объектов не только на локальной машине, но и на других
компьютерах, доступных по сети (в частности, на WWW-сервере). Найденные
объекты загружаются, а их методы выполняются затем на машине
пользователя.
Между двумя сформулированными положениями существует тесная связь. В
компилируемой среде трудно как дистанцироваться от аппаратных особенностей
компьютера, так и реализовать прозрачную динамическую загрузку по сети. С
другой стороны, прием объектов извне требует повышенной осторожности при
работе с ними, а значит, и со всеми Java-программами. Принимать
необходимые меры безопасности проще всего в интерпретируемой среде. Вообще
мобильность, динамизм и безопасность - качества присущие более
интерпретатору, чем компилятору.
Принятые решения сделали Java-среду идеальным средством разработки
клиентских компонентов Web-систем.
Ведущие фирмы быстро оценили уникальные достоинства языка - в первую
очередь его полную независимость от операционной системы, под управлением
которой выполняются Java-программы. В разработку средств создания и
выполнения Java-приложений включились такие крупные компании, как
Microsoft, IBM, Oracle, Sybase, DEC, Borland/Inprise и целый ряд других.
Как грибы после дождя стали возникать многочисленные небольшие фирмы,
специализирующиеся исключительно на Java-технологиях. Результат
коллективных усилий разработчиков не замедлил сказаться: будучи одним из
самых молодых языков программирования, Java получил всеобщее признание и
стал одним из самых популярных средств разработки приложений наряду с
такими "старожилами", как С, Basic, Pascal.
Идея создания приложений, не зависящих от платформы, на которой
они выполняются, была выражена в основном лозунге создателей Java:
"Однажды написанное работает везде". Специфика различных операционных
систем скрыта от разработчика Java-приложений так называемой средой
выполнения программ (Java Runtime Environment, JRE), ядром которой
является виртуальная машина Java (JVM). Такая машина реализуется в виде
специального интерпретатора байт-кода, создаваемого для каждой
операционной системы в отдельности, и выполняющего программы Java в
контексте конкретной операционной системы. Хотя ряд систем разработки
предоставляет возможность скомпилировать исходный код Java в исполняемый
модуль для вполне определенной операционной системы, в общем случае
компилятор Java создает стандартный код, который может быть выполнен и на
Windows, и под управлением OS Linux, и вообще везде, где имеется среда
выполнения Java, - т. е. на большинстве платформ, использующихся в
современных компьютерных системах. Помимо упомянутых ОС, на сегодняшний
день в список операционных систем, для которых созданы собственные JRE,
входят NetWare, MacOS, OS/2, UnixWare, AIX, IRIX, SCO OpenServer,
DigitalUnix, HP UNIX, OS/390, а также ряд других операционных систем, и
список этот продолжает расширяться. Сегодня интерпретатор Java имеется в
наиболее распространенных броузерах Internet, включая Netscape Navigator и
Microsoft Internet Explorer. Это позволяет загружать через Сеть и
выполнять прямо в броузере простые Java-программы (апплеты), внедренные
прямо в текст WWW-страницы.
Java быстро развивается. Обладая авторскими правами на этот язык,
компания Sun Microsystems cовершенствует не только интерфейс
программирования, но и разрабатывает новые технологические решения в
области доступа к базам данных, создания сетевых приложений, поддержки
компонентных технологий (в т. ч. ориентированных на CORBA и COM/DCOM) и во
многих других отраслях. Новые версии систематически публикуются в виде
свободно распространяемого пакета Java Development Kit (JDK), который
может получить любой желающий с Internet-узла www.javasoft.com. Этот пакет
представляет собой полный набор средств разработки приложений,
реализованных в виде утилит командной строки, исчерпывающую документацию и
большое количество примеров. Так, в последнюю версию JDK 1.2, вышедшую в
декабре 1998 г. (и реализовавшую поддержку широко разрекламированной
платформы Java2), были введены новые механизмы регулирования доступа
пользователей к исполняемому коду, специальная подсистема работы с
2D-графикой, поддержка технологии drag-and-drop, реализация Java IDL
(Interface Definition Language) и целый ряд других нововведений. В JDK1.2
официально включена библиотека Java Foundation Classes (JFC), расширившая
старый оконный пакет Abstract Window Toolkit новыми мощными графическими
компонентами Swing.
Как бы ни была богата базовая функциональность Java-окружения времени
выполнения, во многих случаях ее оказывается недостаточно. Это
подтверждает пример и самого базового набора Java-классов. В версии JDK
1.0 таких классов было 8, в версии 1.1 - 22, а в версии 1.2 - более 50.
Это напоминает динамику роста курса доллара в России и соответственно
рождает грустные предчувствия. Очевидно, в какой-то момент будет
зафиксирован базовый набор и предложена дисциплина размещения и загрузки
расширений.
Под расширениями понимаются пакеты классов, написанные на Java (и, быть
может, каких-то других языках программирования), которые могут
использоваться разработчиками приложений для расширения функциональности
базового Java-окружения. Классы расширений могут использоваться
виртуальной Java-машиной практически наравне с базовыми.
Среди расширений можно выделить стандартные, обладающие тремя
свойствами:
полной спецификацией прикладного программного интерфейса;
инструментарием для проверки Java-совместимости;
эталонной реализацией.
Такие стандартные расширения можно использовать наравне с базовыми
классами.
С технической точки зрения расширения представляют собой один или
несколько обычных JAR-файлов. Это значит, что для их изготовления никакого
специального инструментария не требуется.
Расширения можно подразделить на установленные и загружаемые.
Установленные должны быть предварительно размещены в каталоге корневой
каталог Java lib/ext/.
Java в корпоративной
среде |
Вопрос о том, насколько широко и где именно
имеет смысл применять Java в корпоративной среде, является
спорным. Главный аргумент за широкое использование —
безопасность Java-программ и их мобильность. Основной довод
против — относительно низкая скорость выполнения, неприемлемая
для систем с высоким уровнем загрузки. Java-окружение времени
выполнения для корпоративных платформ создано и постоянно
обогащается, пополняясь новыми интересными элементами.
Основными частями этого окружения являются:
Enterprise JavaBeans (EJB) — компонентная объектная
среда в корпоративном варианте, с компонентами не только на
клиентской, но и на серверной стороне. В идейном плане это
центральная часть, с которой связаны надежды на повторное
использование кодов и создание приложений путем сборки из
готовых компонентов.
Java Naming and Directory Interface (JNDI) — стандартный
программный интерфейс к корпоративной службе каталогов.
Может использоваться, например, для поиска контейнеров и
компонентов Enterprise JavaBeans.
Java Interface Definition Language (IDL) — средства
обеспечения совместимости с распределенной объектной моделью
CORBA. Сюда входят компилятор из IDL в Java, а также
облегченная реализация брокера объектных запросов,
поддерживающая протокол IIOP.
Java Remote Method Invocation (RMI) — средства для
создания объектов, допускающих вызов своих методов из другой
виртуальной Java-машины. Совокупность IDL и RMI позволяет
строить на основе Java распределенные объектные системы.
Java Message Service (JMS) — программный интерфейс для
работы с сообщениями, позволяющий организовать очереди
сообщений, реализовать распространение информации по схеме
публикация/подписка и т. д.
Java Mail — программный интерфейс к почтовому протоколу
SMTP. Позволяет встраивать в приложения почтовые средства.
Java Management API (JMAPI) — инструментарий для
построения систем сетевого и прикладного администрирования.
Поддержка протокола SNMP позволяет интегрировать JMAPI с
другими системами управления, такими, например, как Tivoli
Management Environment (TME).
Java Transaction API (JTA), Java Transaction Service
(JTS) — механизмы высокоуровнего, основанного на открытых
стандартах управления транзакциями в распределенной среде.
Java DataBase Connectivity (JDBC) — программный
интерфейс для доступа к реляционным базам данных. Служит
единой основой для реализации средств доступа более высокого
уровня. Сюда же следует отнести спецификации JSQL по
непосредственному встраиванию SQL-операторов в Java. Первой
реализовала эти спецификации компания Oracle. Существует еще
один важный механизм — механизм сервлетов (servlets),
позволяющий динамически расширять функциональность серверов и
получивший наименование по аналогии с апплетами, которые
расширяют функциональность клиентских систем.
| |
Определены также несложные правила размещения бинарного кода, если
таковой имеется.
Установленные расширения доступны всем приложениям и апплетам,
выполняющимся на данной Java-машине. Они ничем не отличаются от базовых
классов.
На загружаемые расширения должна быть ссылка из описательной части
JAR-файла апплета или приложения (для этого служит заголовок Class-Path).
Загрузчик классов, модифицированный для поддержки механизма расширений,
сначала пытается отыскать запрашиваемый класс среди базовых, затем
просматривает установленные расширения и только после этого обращается к
загружаемым. Последние доступны только в запросившем их приложении (или
апплете).
Стандарты Java
В Java-технологии выделяются два вида стандартов: потребительский и
корпоративный. Потребительские платформы по количеству наличных ресурсов
стоят на несколько ступенек ниже корпоративных. Первые представляют собой
устройства со встроенным микропроцессором, вторые - полноценные
компьютеры.
Что такое Jini
В конце 1998 г. Sun анонсировала технологию Jini. На презентации,
устроенной по этому поводу, представители фирмы продемонстрировали, как
фотокамера подключается к сети, после чего с ней сразу можно начинать
работать, однако Jini способна на большее. По словам инженеров Sun, им
удалось придумать очень простую архитектуру в 35 тыс. строк кода,
объединяющую компьютеры и устройства как бы в единую систему. Jini
включает несколько базовых концепций: поисковую службу; способ обнаружения
таких объектов или служб, как фотокамера, и подключения их к поисковой
службе; защиту; лизинг (фотокамера может находить и использовать принтер в
продолжение определенного времени); поддержку транзакций и распределенных
событий.
Jini - это Java-инфраструктура, которая позволяет устройствам и
приложениям автоматически присоединяться к сети и предлагать реализуемые
ими службы в рамках всей сети. Jini не описывает в деталях, как именно
конкретное приложение будет функционировать, но позволяет имеющимся
службам узнавать друг о друге и устанавливать соединение.
Принцип работы Jini |
Когда устройство, например карманный компьютер,
присоединяется к федерации Jini, оно посылает
широковещательный пакет, в котором объявляет себя частью
федерации. Так функционирует служба обнаружения и
присоединения Discovery and Join Service федерации Jini.
Затем карманный компьютер посылает посредника в службу
просмотра Lookup Service, которая, по существу, является тем
пространством, где регистрируются услуги, предоставляемые в
сети Jini. Посредник реализует услуги, предлагаемые каждым
конкретным устройством.
Когда карманному компьютеру необходима услуга, к примеру
печать задания, он посылает запрос с описанием типа нужной
ему услуги. Запрос отправляется в службу Lookup Service,
которая анализирует его и выбирает в федерации наиболее
вероятного кандидата, способного обеспечить эту услугу.
Когда сопоставление выполнено, соответствующий посредник
передается обратно карманному компьютеру.
Возвращенный посредник устанавливает соединение между
карманным компьютером и принтером. Посредник может сам
содержать драйверы или приложения или может просто служить
интерфейсом к приложениям на принтере. Но пользователи этого
не видят. Они просто инициируют взаимодействие и получают
возможность печатать свои документы.
| |
Основу Jini составляет метод удаленного вызова Java Remote Method
Invocation (RMI) из Sun JDK 1.2, сетевой службы, благодаря которой объекты
Java могут взаимодействовать друг с другом. В этом смысле Jini -
концептуальное и практическое расширение Enterprise JavaBeans, являющегося
компонентной программной моделью Java.
Сеть Jini похожа на большой рынок, где торговцы предлагают свои товары.
"Торговцами" в сети Jini могут выступать пользователи, устройства или
приложения. Новый торговец, пришедший на рынок, сообщает о своем появлении
и быстро устраивается за прилавком. Затем он регистрирует свои услуги и
товары, для чего должен вывесить их перечень на большой доске объявлений,
где другие торговцы уже разместили десятки аналогичных списков. Jini
предоставляет механизм, с помощью которого торговцы получают место на
рынке и посылают свои перечни на доску объявлений.
Потенциальные покупатели ищут перечень, в котором есть необходимые им
услуги, а затем списывают оттуда же "адрес" этого торговца. После чего
каждый покупатель оговаривает детали "сделки" с торговцем, в частности,
они обсуждают, "когда" и "сколько". Правила, которым должны удовлетворять
предлагаемые торговцами услуги, диктуются еще одной технологией Sun -
JavaSpaces.
Что такое технология
клиент-сервер |
В ее основе лежит деление программных
компонентов на два типа — те, которые дают заказ на выполнение
операций (клиенты), и те, которые операции выполняют и
возвращают результат (серверы). Эта технология активно
применялась на заре компьютерной техники, когда все расчеты
большой организации производил большой компьютер (мейнфрейм),
к которому для получения результатов подключались персональные
компьютеры. Модель клиент-сервер существует не только в
сетевых условиях, но и при взаимодействии между компонентами
программ. Например, когда пользователь запускает программу
проверки ошибок, текстовый редактор обращается к
соответствующему компоненту. В этот момент редактор выступает
в роли клиента, а компонент - в роли
сервера. | |
Jini использует язык Java, чтобы обеспечить возможность подключения
устройств к сети в режиме plug-and-play. При таком подходе подключаемые
устройства автоматически становятся членами так называемой федерации.
Федерация - это сеть устройств и приложений, которые в соответствии со
спецификацией Jini предлагают друг другу определенные услуги. В федерацию
может входить что угодно: файловые серверы, настольные ПК, сотовые
телефоны, дисковые массивы, принтеры, программные объекты.
Развитие и бурный рост Internet привели к широкой популярности Java, и
сейчас взоры софтовых компаний обращаются к новому неохваченному рынку -
бытовым приборам. Время покажет, сможет ли Java укрепиться в качестве
средства управления "умной" электроникой.
|