На какие направления разделяется платформа java 2. Введение в Java

What is JVM?

JVM is a engine that provides runtime environment to drive the Java Code or applications. It converts Java bytecode into machines language. JVM is a part of JRE(Java Run Environment). It stands for Java Virtual Machine

  • In other programming languages, the compiler produces machine code for a particular system. However, Java compiler produces code for a Virtual Machine known as Java Virtual Machine.
  • First, Java code is complied into bytecode. This bytecode gets interpreted on different machines
  • Between host system and Java source, Bytecode is an intermediary language.
  • JVM is responsible for allocating memory space.

In this tutorial, you will learn-

JVM Architecture

Let"s understand the Architecture of JVM. It contains classloader, memory area, execution engine etc.

1) ClassLoader

The class loader is a subsystem used for loading class files. It performs three major functions viz. Loading, Linking, and Initialization.

2) Method Area

JVM Method Area stores class structures like metadata, the constant runtime pool, and the code for methods.

All the Objects, their related instance variables, and arrays are stored in the heap. This memory is common and shared across multiple threads.

4) JVM language Stacks

Java language Stacks store local variables, and it’s partial results. Each thread has its own JVM stack, created simultaneously as the thread is created. A new frame is created whenever a method is invoked, and it is deleted when method invocation process is complete.

5) PC Registers

PC register store the address of the Java virtual machine instruction which is currently executing. In Java, each thread has its separate PC register.

6) Native Method Stacks

Native method stacks hold the instruction of native code depends on the native library. It is written in another language instead of Java.

7) Execution Engine

It is a type of software used to test hardware, software, or complete systems. The test execution engine never carries any information about the tested product.

8) Native Method interface

The Native Method Interface is a programming framework. It allows Java code which is running in a JVM to call by libraries and native applications.

9) Native Method Libraries

Native Libraries is a collection of the Native Libraries(C, C++) which are needed by the Execution Engine.

Software Code Compilation & Execution process

In order to write and execute a software program, you need the following

1) Editor – To type your program into, a notepad could be used for this

2) Compiler – To convert your high language program into native machine code

3) Linker – To combine different program files reference in your main program together.

4) Loader – To load the files from your secondary storage device like Hard Disk, Flash Drive, CD into RAM for execution. The loading is automatically done when you execute your code.

5) Execution – Actual execution of the code which is handled by your OS & processor.

With this background, refer the following video & learn the working and architecture of the Java Virtual Machine.

C code Compilation and Execution process

To understand the Java compiling process in Java. Let"s first take a quick look to compiling and linking process in C.

Suppose in the main, you have called two function f1 and f2. The main function is stored in file a1.c.

Function f1 is stored in a file a2.c

Function f2 is stored in a file a3.c

All these files, i.e., a1.c, a2.c, and a3.c, is fed to the compiler. Whose output is the corresponding object files which are the machine code.

The next step is integrating all these object files into a single .exe file with the help of linker. The linker will club all these files together and produces the .exe file.

During program run, a loader program will load a.exe into the RAM for the execution.

Java code Compilation and Execution in Java VM

Let"s look at the process for JAVA. In your main, you have two methods f1 and f2.

  • The main method is stored in file a1.java
  • f1 is stored in a file as a2.java
  • f2 is stored in a file as a3.java

The compiler will compile the three files and produces 3 corresponding .class file which consists of BYTE code. Unlike C, no linking is done .

The Java VM or Java Virtual Machine resides on the RAM. During execution, using the class loader the class files are brought on the RAM. The BYTE code is verified for any security breaches.

Next, the execution engine will convert the Bytecode into Native machine code. This is just in time compiling. It is one of the main reason why Java is comparatively slow.

NOTE: JIT or Just-in-time compiler is the part of the Java Virtual Machine (JVM). It interprets part of the Byte Code that has similar functionality at the same time.

Why is Java both Interpreted and Compiled Language?

Programming languages are classified as
  • Higher Level Language Ex. C++, Java
  • Middle-Level Languages Ex. C
  • Low-Level Language Ex Assembly
  • finally the lowest level as the Machine Language.

A compiler is a program which converts a program from one level of language to another. Example conversion of C++ program into machine code.

The java compiler converts high-level java code into bytecode (which is also a type of machine code).

An interpreter is a program which converts a program at one level to another programming language at the same level. Example conversion of Java program into C++

In Java, the Just In Time Code generator converts the bytecode into the native machine code which are at the same programming levels.

Hence, Java is both compiled as well as interpreted language.

Why is Java slow?

The two main reasons behind the slowness of Java are

  1. Dynamic Linking: Unlike C, linking is done at run-time, every time the program is run in Java.
  2. Run-time Interpreter: The conversion of byte code into native machine code is done at run-time in Java which furthers slows down the speed

However, the latest version of Java has addressed the performance bottlenecks to a great extent.

Summary :

  • JVM or Java Virtual Machine is the engine that drives the Java Code. It converts Java bytecode into machines language.
  • In JVM, Java code is compiled to bytecode. This bytecode gets interpreted on different machines
  • JIT or Just-in-time compiler is the part of the Java Virtual Machine (JVM). It is used to speed up the execution time
  • In comparison to other compiler machines, Java may be slow in execution.

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

Вы - начинающий Java-разработчик? На этой странице вы найдете обзор основных Java™-технологий и их места в разработке современного программного обеспечения. Эта страница, содержащая ссылки на вводные статьи developerWorks по этой и смежным темам, другие образовательные материалы, а также на материалы для загрузки и продукты IBM, является превосходной отправной точкой для изучения Java.

Что такое "технологии Java"?

Java - это одновременно язык программирования и платформа.

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

Во-вторых, Java - это программная платформа , версии которой поставляются для различных аппаратных систем. Существуют три версии Java (см. раздел Редакции платформы Java ниже). Платформа включает в себя JVM и интерфейс прикладного программирования на Java (API), представляющий собой обширный набор готовых программных компонентов (классов), облегчающих разработку и развертывание апплетов и приложений. API Java охватывает многие аспекты разработки на Java, в том числе манипулирование базовыми объектами, сетевое программирование, обеспечение безопасности, генерацию XML и Web-сервисы. API организован в виде набора библиотек, именуемых пакетами , которые содержат классы и интерфейсы для решения связанных друг с другом задач.

В дополнение к API каждая полноценная реализация платформы Java должна включать следующее:

  • Инструментарий разработчика для компиляции, запуска, мониторинга, отладки и документирования приложений.
  • Стандартные механизмы развертывания приложений в пользовательской среде.
  • Инструментарии, позволяющие создавать сложные графические интерфейсы пользователей.
  • Интеграционные библиотеки для программного доступа к базам данных и удаленного манипулирования объектами.

JVM также является проверенной средой для выполнения приложений, написанных на отличных от Java языках. В частности, Groovy, Scala и специализированные реализации Ruby и Python предоставляют разработчикам возможность исполнения на JVM динамических и функциональных языков (более подробная информация приведена в разделе Какое отношение имеет Java к динамическим языкам и функциональному программированию?).

Язык Java был разработан компанией Sun Microsystems. В настоящее время развитие Java-технологий, в том числе работа над спецификациями, эталонными реализациями и тестами совместимости, осуществляется под контролем открытой некоммерческой организации JCP (Java Community Process), которая объединяет Java-разработчиков и держателей лицензий. В 2007 г. Sun выпустила свободную версию Java, включающую основные компоненты платформы, под лицензией GNU GPL v2 (GPLv2). Подробнее об этой версии можно прочитать в разделе Java и разработка свободного программного обеспечения.

Зачем следует изучать Java?

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

Язык и платформа Java обладают великолепной масштабируемостью. Вы можете легко создавать приложения для устройств с ограниченными ресурсами, адаптируя программное обеспечение, изначально написанное для настольных компьютеров. При этом язык Java идеально подходит и для разработки серверных Web-приложений, при помощи которых пользователь может получать доступ к вычислительным ресурсам в Web. Возможность безопасного выполнения кода, загруженного через сеть, была изначально заложена в конструкцию Java, поэтому этот язык обеспечивает высокий уровень безопасности при работе через Интернет. Web-приложения работают в средах выполнения, называемых Web-контейнерами , которые предоставляют множество удобных сервисов, в том числе диспетчеризацию запросов, обеспечение безопасности и параллельной работы, управление жизненным циклом, а также доступ к таким API, как управление именами, транзакциями и электронная почта. На Java написан ряд серверов приложений , выполняющих функции Web-контейнеров для других компонентов Java, XML и Web-сервисов, которые взаимодействуют с базами данных и динамически формируют содержимое Web-страниц. Подобные серверы также предоставляют среду для развертывания корпоративных приложений и средства для управления транзакциями, кластеризации, обеспечения безопасности, связности и необходимого уровня доступности, производительности и масштабируемости.

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

  • Ознакомьтесь с подходом к , принятым в IBM, и узнайте, как SOA помогает создавать гетерогенные приложения, функциональность которых обеспечивается из разных источников как внутри, так и за пределами предприятия, тем самым поддерживая горизонтальные бизнес-процессы. IBM предоставляет ряд , ориентированных на бизнес-пользователей и ИТ-специалистов, которые помогут вам начать использовать эту технологию.
  • - это предлагаемый IBM компонентный подход, предоставляющий весь спектр возможностей для проведения стратегических изменений. Предоставляемые решения базируются на гибком, расширяемом, основанном на открытых стандартах программном обеспечении (в том числе Java) и аппаратной инфраструктуре.

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

  • Java SE (Java Platform, Standard Edition) . Используя Java SE, вы можете создавать и развертывать Java-приложения для настольных компьютеров и серверов, а также разрабатывать встроенное программное обеспечение и программы для систем реального времени. Редакция Java SE включает классы, необходимые для создания Web-сервисов, и базовые компоненты Java EE (Java Platform, Enterprise Edition). Текущей версией платформы Java SE является Java SE 6, также известная как "Мустанг". При этом многие разработчики по-прежнему используют Java SE 5 (Java 5.0, или "Тигр").
    • Прекрасный обзор возможностей Java SE 5 приведен в статьях колонки . Большая часть аспектов программирования для платформы Java SE 5, для которой были созданы многие существующие приложения, по-прежнему актуальны и для Java SE 6.
    • В статье описываются новые возможности Java SE 6, служащие для мониторинга и оценки производительности приложений.
    • В статье приводится введение в скриптовый язык, работающий поверх платформы Java SE 6 и служащий для упрощения программирования сложных пользовательских интерфейсов.
    • В серии из двух статей под названием содержится введение в API, предоставляемый Java SE 6, который позволяет Java-приложениям выполнять динамический скриптовый код и наоборот. .
  • Java EE (Java Platform, Enterprise Edition) . Эта корпоративная версия платформы помогает разработчикам создавать и развертывать переносимые, надежные, масштабируемые и безопасные серверные приложения на Java. Развивая возможности Java SE, Java EE предоставляет API Web-сервисов, компонентных моделей, удаленного взаимодействия и управления для реализации корпоративного программного обеспечения по принципам SOA и Web 2.0.
    • Прочитайте статьи и , в которых содержится вводный обзор возможностей последней версии платформы Java EE.
    • Обратите внимание на серию - популярной инфраструктуре для создания легковесных и надежных приложений Java EE.
    • Дополнительная информация о Java EE приводится в статьях колонки .
    • Статьи серии Начало пути: Миграция на платформу Java (EN) были написаны специально для разработчиков.NET, клиент-серверных приложений для Windows и приложений ASP, чтобы помочь им перейти на Java.
  • Java ME (Java Platform, Micro Edition) . Java ME предоставляет среду для выполнения приложений, созданных для широкого круга мобильных и встроенных систем, например мобильных телефонов, карманных компьютеров, телевизионных приставок и принтеров. Эта редакция платформы предоставляет средства создания гибких пользовательских интерфейсов, надежную модель обеспечения безопасности, полный спектр встроенных сетевых протоколов, а также мощную поддержку сетевых и оффлайновых динамически загружаемых приложений. Приложения, базирующиеся на спецификациях Java ME, могут быть запущены на множестве устройств и при этом способны эффективно задействовать их системные возможности.

Какие технологии являются основными компонентами платформы Java?

В разделе Java на сайте developerWorks содержится , входящих в состав Java. Ниже перечислены некоторые из компонентов, возможных дополнительных пакетов и расширений, входящих в состав каждой редакции платформы. Для каждой технологии приведено краткое описание, а также ссылка на материалы, в которых описывается ее место в мире Java. Обратите внимание, что многие из компонентов входят в состав всех трех редакций платформы Java.

Технологии, входящие в состав Java SE:

  • Java Foundation Classes (Swing) (JFC) - это набор библиотек Java-классов, служащих для создания графических интерфейсов пользователя и реализации других графических функций в клиентских Java-приложениях. Руководство .
  • JavaHelp - это независимая от платформы расширяемая справочная система, позволяющая разработчикам и техническим писателям встраивать справочные страницы в апплеты, программные компоненты, приложения, операционные системы и устройства, а также создавать справочные Web-системы. Обратитесь к статье .
  • Благодаря Java Native Interface (JNI) Java-приложения, выполняющиеся внутри JVM, могут взаимодействовать с программами и библиотеками, написанными на других языках программирования.
  • Технология Java Web Start упрощает развертывание Java-приложений, позволяя пользователям загружать и запускать функционально насыщенные программные средства, например, электронные таблицы, одним нажатием на кнопку мыши, без инсталляции (см. статью ).
  • Java Database Connectivity (JDBC) - это API, предоставляющий средства для доступа к большинству реляционных источников данных из Java-приложений. С его помощью можно подключаться к множеству баз данных SQL, а также другим табличным источникам данных, например, электронным таблицам и неструктурированным файлам.
  • Java Advanced Imaging (JAI) - это объектно-ориентированный API, предоставляющий простую высокоуровневую модель программирования, упрощающую манипулирование изображениями.
  • Java Authentication and Authorization Service (JAAS) - это технология, предоставляющая сервисам средства для аутентификации пользователей и проверки их прав доступа. Она включает Java-реализацию стандартной инфраструктуры PAM (Pluggable Authentication Module) и поддерживает авторизацию на уровне пользователей.
  • Java Cryptography Extension (JCE) - это набор пакетов, предоставляющих инфраструктуру и реализации алгоритмов шифрования, генерации и обмена ключами и установления подлинности сообщений (Message Authentication Code - MAC). Эта технология также включает поддержку симметричных, асимметричных, блочных и поточных шифров, а также безопасных потоков и опечатанных объектов (sealed objects). Более подробную информацию можно получить в руководстве .
  • Java Data Objects (JDO) - это стандартная абстрактная модель долговременного хранения Java-объектов, базирующаяся на интерфейсах. С ее помощью разработчики могут напрямую сохранять экземпляры Java-классов предметной области в постоянном хранилище (например, базе данных). Эта модель в ряде случаев может заменять прямую запись в файл, сериализацию, JDBC, а также использование серверных компонентов EJB, как управляемых контейнерами (Container Managed Persistence - CMP), так и самостоятельно хранящих состояние (Bean Managed Persistence - BMP).
  • Пакет Java Management Extensions (JMX) содержит средства для создания распределенных, модульных, динамических и доступных через Web приложений для управления и мониторинга устройств, программного обеспечения и сетей, основанных на предоставлении сервисов (см. статью ).
  • Java Media Framework (JMF) позволяет добавлять аудио-, видео- и другую медиа-информацию в приложения и апплеты на Java (см. руководство ).
  • Java Naming and Directory Interface (JNDI) - это унифицированный интерфейс для обращения к различным сервисам имен и каталогов в корпоративной сети. С его помощью приложения могут эффективно подключаться к различным службам имен и каталогов в гетерогенной среде уровня предприятия.
  • Java Secure Socket Extensions (JSSE) - это набор пакетов для обеспечения безопасного обмена информацией в Интернете. Они реализуют Java-версию протоколов SSL (Secure Sockets Layer) и TLS (Transport Layer Security) и предоставляют средства для шифрования данных, проверки целостности сообщений, аутентификации на сервере и на клиенте (последняя возможность не является обязательной).
  • Java Speech API (JSAPI) включает в себя спецификации JSGF (формат грамматики Java Speech) и JSML (язык разметки Java Speech). Этот пакет предоставляет возможности для использования речевых технологий в пользовательском интерфейсе. JSAPI - это кросс-платформенный API для поддержки распознавания голосовых команд, систем речевого ввода данных и синтеза речи. За более подробной информацией обратитесь к следующему разделу статьи .
  • Java 3D - это API, предоставляющий кросс-платформенные и масштабируемые возможности для работы с 3D-графикой в Java-приложениях. API организован в виде набора объектно-ориентированных интерфейсов, складывающихся в единую простую высокоуровневую модель программирования.
  • Механизм Metadata Facility позволяет разработчикам определять атрибуты для классов, интерфейсов, полей и методов, благодаря чему они могут подвергаться специальной обработке со стороны средств разработки, развертывания и сторонних библиотек на этапе выполнения приложения (см. статью ).
  • Java Content Repository API - это API для доступа к репозиториям контента в Java SE независимо от их реализации. Подобные репозитории представляют собой высокоуровневые системы управления информацией и являются расширенными вариантами классических репозиториев данных.
  • Enumerations (перечисление) - это тип данных, позволяющий описывать различные элементы данных в виде типизированного набора констант.
  • Generics (обобщенные типы) позволяют создавать классы с параметрами (абстрактными типами), которые указываются на этапе инстанциирования. За подробностями обратитесь к статье , а также ознакомьтесь со статьей , в которой рассказывается о том, как обобщенные типы облегчают работу с коллекциями в Java SE 6.0.
  • Утилиты Concurrency - это набор классов, предоставляющих функциональность среднего уровня, которая обычно требуется приложениям, выполняющим параллельную обработку данных.
  • Java API for XML Processing (JAXP) - это API, при помощи которого Java-приложения могут разбирать и преобразовывать XML-документы вне зависимости от используемого процессора XML. Это позволяет приложениям легко переключаться между разными процессорами без изменений в прикладном коде. В свою очередь, технология JAXB (Java API for XML Binding ) предоставляет возможности для автоматизации сопоставления документов XML и объектов Java.
  • SOAP with Attachments API for Java (SAAJ) предоставляет разработчикам функции для формирования и обработки сообщений в соответствии со спецификацией SOAP 1.1 c указанием SOAP with Attachments (SOAP с вложениями). За более подробной информацией обратитесь к статье ).

Технологии, входящие в состав J2EE:

  • Enterprise JavaBeans (EJB) - это компонентная модель, которая упрощает разработку связующего программного обеспечения, предоставляя такие сервисы, как управление транзакциями, обеспечение безопасности и подключение к базам данных.
  • Спецификация портлетов определяет набор API для создания порталов на Java, охватывая такие аспекты, как агрегирование и представление информации, персонализация и обеспечение безопасности (см. статью ).
  • JavaMail - это API, предоставляющий набор абстрактных классов, моделирующих почтовую систему.
  • Java Message Service (JMS) - это API, поддерживающий создание переносимых Java-приложений на основе механизма обмена сообщениями. Он определяет общий набор базовых понятий и стратегий программирования для всех систем обмена сообщениями, совместимых с JMS .
  • JavaServer Faces (JSF) предоставляет программную модель, помогающую создавать Web-приложения путем компоновки страниц из многократно используемых компонентов пользовательского интерфейса, а также связывания этих компонентов с источниками данных, а событий, генерируемых на клиенте - с серверными обработчиками. За более подробной информацией обратитесь к руководству из двух частей и серии статей колонки .
  • JavaServer Pages (JSP) предоставляет Web-разработчикам средства для быстрого создания и простой поддержки динамических, кросс-платформенных Web-страниц, которые разделяют пользовательский интерфейс и генерацию контента, благодаря чему дизайнеры могут изменять разметку, не трогая динамически формируемое содержимое (см. руководство .
  • Стандартная библиотека тегов для JavaServer Pages (JSTL) - это набор специализированных тегов, предоставляющих стандартный формат для выполнения действий, необходимых многим Web-приложениям. Ознакомьтесь со статьей Обновите ваши страницы JSP при помощи JSTL (EN) и серией из четырех частей под названием .
  • Сервлеты Java расширяют функциональность Web-серверов, предоставляя кросс-платформенный, компонентный подход к созданию Web-приложений, свободный от ограничений производительности, характерных для CGI.
  • J2EE Connector Architecture (JCA) предоставляет стандартную архитектуру для подключения приложений J2EE к разнородным корпоративным информационным системам (EIS). Эта архитектура определяет набор масштабируемых и безопасных механизмов на основе транзакций, при помощи которых поставщики EIS могут предоставлять стандартные адаптеры ресурсов для включения в сервер приложений. За более подробной информацией обратитесь к статьям , и руководству .
  • Спецификация J2EE Management (JMX) определяет информационную модель управления для платформы J2EE. Эта модель была специально спроектирована для взаимодействия со многими системами и протоколами управления. Она содержит стандартные средства для сопоставления с общей информационной моделью (Common Information Model - CIM), информационной базой управления SNMP (SNMP Management Information Base - MIB) и объектной моделью Java при помощи резидентного серверного компонента EJB (J2EE Management EJB Component - MEJB).
  • Java Transaction API (JTA) – это высокоуровневая реализация и независимый от протоколов API, предоставляющий программам и серверам приложений средства для доступа к транзакциям. Java Transaction Service (JTS) определяет реализацию менеджера транзакций, который поддерживает JTA и реализует на нижележащем уровне сопоставление с объектным транзакционным сервисом OMG (Object Transaction Service - OTS 1.1). Распространение транзакций в JTS реализуется при помощи протокола Inter-ORB (IIOP). За более подробной информацией обратитесь к статье .

Технологии, входящие в состав J2ME:

  • Mobile Information Device Profile (MIDP) - это одна из двух конфигураций, составляющих среду выполнения Java для мобильных устройств с ограниченными ресурсами. MIDP предоставляет приложениям базовую функциональность, включающую в себя средства для создания интерфейсов пользователя, подключения к сетевым ресурсам, локального хранения данных и управления жизненным циклом.
  • Connected Device Configuration (CDC) – это стандартизированная инфраструктура для создания и развертывания приложений, доступ к которым может осуществляться со стороны многих сетевых и встроенных устройств.
  • Mobile 3D Graphics API для J2ME (M3G) - это легковесный интерактивный API для реализации трехмерной графики, являющийся дополнительным компонентом J2ME. Подробнее о нем можно прочитать в серии из двух частей .

Технологии Java и создание Web-приложений

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

Ознакомьтесь с приведенными ниже материалами, посвященным вопросам Web-разработки на Java.

  • Статьи колонки рассказывают о Grails – современной инфраструктуре для создания Web-приложений, написанных на Groovy. Grails позволяет органично сочетать ранее написанный код на Java с возможностью использования гибкого и динамического скриптового языка. Более подробная информация о Groovy приведена ниже, в разделе Какое отношение имеет Java к динамическим языкам и функциональному программированию?.
  • Ajax – это методология программирования, предусматривающая использование скриптовых языков на стороне клиента для обмена данными с Web-сервером, что позволяет быстро обновлять информацию на страницах без необходимости их полной перезагрузки. Прочитав серии статей и , вы узнаете, чем Ajax может помочь вам как разработчику Java-приложений. За дополнительной информацией вы можете обратитесь к на сайте developerWorks.
  • JavaServer Faces (JSF) предоставляет программную модель, помогающую создавать Web-приложения путем компоновки страниц из многократно используемых компонентов пользовательского интерфейса, а также связывания этих компонентов с источниками данных, а событий, генерируемых на клиенте - с серверными обработчиками. За более подробной информацией обратитесь к руководству из двух частей и серии статей колонки .
  • Платформа Web-инструментария Eclipse (Web Tools Platform – WTP) расширяет популярную среду разработки Eclipse, добавляя в нее средства для создания Web-приложений на основе технологий Java EE (см. руководство ).
  • В на сайте developerWorks можно найти множество других превосходных материалов по этим вопросам.

Технологии Java, SOA и Web-сервисы

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

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

Более подробную информацию можно получить, прочитав следующие материалы:

  • Страницы и на сайте developerWorks помогут вам сориентироваться в этих непростых технологиях.
  • В статьях серии рассказывается об инфраструктурах Web-сервисов на Java, а также о новых функциональных слоях, созданных на базе этих сервисов.
  • В статье приводится введение в элегантный стиль проектирования Web-сервисов под названием Передача репрезентативного состояния (Representational State Transfer - REST) и рассказывается об использовании Java для создания Web-сервисов по принципам REST.
  • Понимание технологии JAX-RPC (RPC на основе API Java для работы с XML) имеет большое значение для создания эффективных Web-сервисов на Java.
  • JAX-WS – это очевидный следующий шаг в развитии JAX-RPC. Практическое введение в этот новый API дано в руководстве .
  • Серия статей представляет собой руководство по компонентной архитектуре сервисов (Service Component Architecture - SCA) - спецификации, описывающей модель разработки приложений и систем по принципам SOA.
  • В статье приводится введение в инфраструктуру Service Data Objects (объекты данных сервисов), которая упрощает модель работы с данными в Java EE при создании SOA-приложений.

Какое отношение имеет Java к динамическим языкам и функциональному программированию?

Многие разработчики, начинающие осваивать Java, имеют богатый опыт работы с другими языками программирования. При этом даже самые маститые программисты признают, что Java не является идеальным языком для решения всех встречающихся на практике задач. К счастью, благодаря поддержке со стороны JVM при разработке приложений для платформы Java можно пользоваться всеми преимуществами современных динамических скриптовых и функциональных языков. Гибкость и динамизм этих языков оказываются очень полезными при создании прототипов и реализации определенных типов приложений.

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

  • Скриптовый язык Groovy позволяет Java-разработчикам использовать наиболее привычные языковые конструкции и библиотеки, при этом предоставляя гибкую, динамическую среду разработки, которая не требует компиляции, упрощает синтаксис и поддерживает выполнение скриптов внутри обычных Java-приложений. Детальный обзор возможностей этого языка приводится в статьях серии .
  • Новый API скриптов в Java SE 6, обеспечивающий обратную совместимость с Java SE 5 и содержащий небольшой набор интерфейсов и классов, предоставляет простой способ вызова из Java-кода скриптов, написанных на десятках языков. С его помощью вы можете загружать и вызывать внешние скрипты на этапе выполнения, динамически изменяя поведение приложения. Подробнее об этом API можно прочитать в серии из двух статей под названием .
  • Вы - горячий сторонник функционального программирования? Тогда вам следует обратить внимание на колонку , в которой рассказывается о Scala - языке программирования для JVM, сочетающем функциональный и объектно-ориентированный подход к разработке.
  • VM поддерживают альтернативные языки программирования уже на протяжении длительного времени. В статьях колонки можно прочитать о реализациях для JVM таких языков, как Rexx, Ruby, JavaScript, Python и некоторых других.

Java и создание свободного программного обеспечения

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

  • Организация Apache Software Foundation(EN) объединяет множество открытых проектов, большинство из которых разрабатываются на основе технологий Java. Ниже перечислены некоторые представители этого семейства проектов.
    • Apache Struts(EN) - это инфраструктура для создания Web-приложений, архитектура которых следует принципу "Модель-Представление-Контроллер" (Model-View-Controller).
    • Apache Shale(EN) - еще одна современная инфраструктура для создания Web-приложений, являющаяся наследницей Struts и базирующаяся на технологии JSP (JavaServer Pages). Введение в Shale содержится в статьях серии .
    • Apache Ant является фактическим стандартом для автоматизации процесса сборки Java-приложений.
    • Средство сборки Apache Maven(EN) проектировалось с учетом требований современных проектов по созданию программного обеспечения, для которых характерны динамичное взаимодействие между группами разработчиков и зависимость от множества независимо поддерживаемых компонентов (см. руководство ).
    • Apache Tomcat - это популярный Web-контейнер, поддерживающий сервлеты и серверные страницы Java (JSP).
    • Проект Apache Geronimo(EN) заключается в создании полностью соответствующего спецификации сервера приложений Java EE на основе исключительно свободных технологий. Подробнее о Geronimo можно прочитать в статье , а также в на сайте developerWorks, содержащем множество полезных материалов.
    • Apache Derby(EN) - это сервер реляционных баз данных, полностью реализованный на Java. Введение в Derby приводится в статье .
  • Eclipse(EN) – это открытая и независимая платформа разработки, а также набор базовых инструментов для создания программного обеспечения. Она написана на Java и предоставляет инфраструктуру на основе подключаемых модулей, облегчающую разработку, интеграцию и использование программных средств. IBM является одним из учредителей Eclipse.org и активно участвует в совете управляющих этого проекта, а также его подкомитетах. О некоторых компонентных технологиях платформы Eclipse, направленных на создание Java-приложений, можно прочитать в следующих материалах:
    • AspectJ(EN) - это аспектно-ориентированное расширение языка Java, которое может использоваться для модульной реализации сквозной функциональности, например журналирования или обработки исключений.
    • Standard Widget Toolkit(EN) (SWT) - это инструментарий, позволяющий задействовать возможности операционной системы для создания элементов пользовательских интерфейсов эффективным и переносимым образом.
    • Mylyn(EN) - это мощная система управления заданиями для пользователей Eclipse. Подробное руководство содержится в статьях и, ранее известный как "система безопасности Acegi для Spring" - это мощное и гибкое решение для обеспечения безопасности в корпоративных приложениях, созданных на базе инфраструктуры Spring. Она подробно рассматривается в четырех статьях серии .
  • Компания Sun Microsystems также начала работу по , запустив следующие общественные проекты на сайте java.net(EN) :
    • OpenJDK

Как развивать навыки программирования на Java?

Есть два основных пути развития ваших навыков программирования на Java: пройти специальный курс обучения (с возможностью сертификации) или изучать Java самостоятельно, практикуясь в написании кода. Обучающие курсы не только позволяют вам перенять опыт квалифицированных разработчиков, но и дают возможность получения сертификата, который может убедить потенциального работодателя, что вы обладаете навыками, необходимыми для решения стоящих перед нам технических задач. При этом вы сможете углубить свои знания в различных областях Java, экспериментируя самостоятельно и используя все доступные ресурсы. Какой бы путь вы ни выбрали, вам помогут следующие материалы.

  • Руководства и статьи
    • На сайте developerWorks представлена обширная коллекция , которые по степени полезности в процессе изучения Java уступают только самостоятельному написанию кода.
    • Статьи серий и прекрасно подходят для совершенствования вашей техники владения Java.
    • Применение теории проектирования при создании реальных приложений рассматривается в статьях серии .
    • Опытные разработчики Java заранее закладывают в свои приложения средства для их отладки и тестирования. На сайте developerWorks представлены несколько статей серии - это игры реального времени на базе платформы Eclipse, направленные на изучение программирования на Java. Вводная информация о CodeRuler приводится в статье Завоевание средневековых королевств вместе с CodeRuler (EN).
  • Технические обучающие курсы IBM
    • Вашему вниманию предлагается большой выбор онлайновых, очных и мультимедийных курсов по Java, разработанных подразделением IBM Global Services.
  • Сертификация
    • Вы можете сдать несколько экзаменов для получения сертификатов, свидетельствующих о ваших навыках программирования на Java. Материалы, посвященные курсам с последующей сертификацией, находятся на сайте Java Certification(EN) .
    • IBM предоставляет возможность ваших навыков в таких технологиях, имеющих отношения к Java, как создание корпоративных приложений для WebSphere, программное обеспечение Rational, DB2, XML и SOA.
  • Форумы
    • , модерируемые экспертами, за плечами которых многолетний опыт работы с Java-технологиями - это наиболее интерактивный из способов изучения языка Java.

Продукты и технологии IBM для Java-разработчиков

IBM занимает одним из лидеров в практическом применении Java-технологий. Ниже приведены ссылки на некоторые продукты и технологии IBM, предлагаемые разработчикам приложений для платформы Java.

  • Бесплатно загружаемые продукты:
    • (Java Developer Kit) - это набор средств для создания и тестирования апплетов и приложений для Java SE и Java ME на множестве популярных операционных систем, в том числе Windows, Linux и AIX.
    • (IBM Development Package for Eclipse) - это основанный на Eclipse неподдерживаемый инструментарий разработчика, позволяющий создавать и запускать приложения в собственной готовой среде разработки.
    • : Вы можете загрузить пакеты свободного программного обеспечения Eclipse c сайта developerWorks, в том числе параллельно выпускаемые продукты Calisto и Europa.
    • - это виртуальное хранилище перспективных Java-технологий, разрабатываемых в IBM. К ним относятся API, интегрированные среды разработки, комплекты разработчика, эталонные реализации и утилиты. Ниже приведены ссылки на некоторые технологии, представленные в alphaWorks.
    • . Эта утилита помогает анализировать и генерировать пригодные для тестирования Ant-скрипты для сборки проектов, разработанных при помощи Eclipse, Rational и WebSphere IDE для платформ Java EE и SCA.
    • (IBM Pattern Modeling and Analysis Tool for Java Garbage Collector). Данная утилита разбирает подробные трассировочные файлы GC, анализирует использование динамической памяти (кучи) и рекомендует настройки приложения на основе полученных результатов моделирования работы с памятью. (Secure Shell Library for Java) - это легковесная реализация протокола SSH-2, разработанного комитетом IETF (Internet Engineering Task Force). Он предоставляет средства для безопасной аутентификации и другие защищенные сервисы, работающие в условиях незащищенной сети. позволяет консолидировать и преобразовывать данные, тем самым повышая продуктивность, гибкость и производительность вашего бизнеса за счет оперативного доступа к нужной информации.

Как уже отмечалось ранее, платформа Java EE ориентирована на построение корпоративных приложений.

Существует четыре платформы, основанные на языке Java (рис. 8.2):

    Java Platform, Standard Edition (Java SE),

    Java Platform, Enterprise Edition (Java EE),

    Java Platform, Micro Edition (Java ME),

Рис. 8.2. Платформы Java™

Любая из Java платформ включает виртуальную машина Java (Java Virtual Machine –JVM) и описания интерфейсов для разработки приложений (традиционно называется Application programming interface – API). Приложения, написанные на языке Java, транслируются в байт код (файлы с расширением class). JVM представляет из себя программу, ориентированную на конкретную аппаратно–программную архитектуру (операционная система, разрядность процессора), и позволяющая запускать программы, транслированные в байт код. API представляет из себя коллекцию компонентов, которые используются при разработке приложений на конкретной платформе. Любая платформа Java включает виртуальную машину и API, что позволяет запускать приложения для этой платформе на любой машине, обеспечивая реальную кроссплатформенность. При этом обеспечиваются основные заявленные преимущества языка программирования Java: независимость от аппаратно-программной платформы, функциональность, устойчивость, легкость разработки и безопасность.

Центральной является платформа Java Standard Edition. Java SE реализует основную функциональность языка Java: начиная от примитивных типов и базовых классов, до сложных классов, обеспечивающих удаленное сетевое взаимодействие, безопасность, доступ к базам данных, реализацию графического интерфейса пользователя и обработку XML документов (XML parsing).

Платформа Java Enterprise Edition является масштабной настройкой над Java SE. Java EE предоставляет API и окружение для выполнения Java EE приложений (Java EE Server), необходимые для разработки, развертывания и выполнения масштабируемых, крупномасштабных, многоуровневых, распределенных, устойчивых, безопасных приложений уровня предприятия.

8.3.2 Элементы и технологии Java ee

Как уже отмечалось ранее, разработчики современного программного обеспечения давно осознали необходимость разработки распределенных, переносимых приложений, поддерживающих транзакции, многопоточность и масштабируемость, что позволяет реализовывать сложные серверные приложения. Современное состояние информационных технологий требует, чтобы приложение уровня предприятия разрабатывалось за меньшее время и при этом обеспечивалась высокая скорость выполнения при низких требованиях к ресурсам. Основной целью JavaEE является сокращение времени на разработку системы за счет мощного набора API, позволяющего преодолеть проблемы сложности и достичь необходимые характеристики программного обеспечения.

Контекст технологий платформы Java EE представлен на рис. 8.3.

Рис. 8.3. Контекст технологий Java EE

Являясь надстройкой над платформой Java SE, высокоуровневые технологии Java EE (EJB, JSF, JMS и др.) основаны на некоторых базовых технологиях, обеспечивающих:

    поиск и получение ресурсов по именам (JNDS – Java Naming and Directory Service – Служба каталогов и именований Java, основанная на поддержке JNDI API);

    вызов методов удаленных объектов (RMI – Remote Method Invocation);

    связь с базами данных посредством SQL;

    поддержка транзакций средствами JTS (JTS – Java Transaction Service – Служба транзакция Java, обеспечивающая работу согласно Java Transaction API – JTA).

Платформа Java EE использует упрощенную модель приложений. Каждое приложение имеет определенную структуру, а параметры развертывания приложения определяется так называемым дескриптором поставки. Дескриптор поставки представляет из себя XML описание. Структура Java EE приложения представлена на рис. 8.3.

Рис. 8.3. Структура Java EE приложения

Основными структурными элементами Java EE приложения являются:

    Web модуль, включающий компоненты web уровня,

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

    каталог дескрипторов поставки META-INF.

Платформа Java EE активно используют аннотации – специальные элементы кода языка Java, используемые для определения характеристик развертывания и функционирования компонентов уровня предприятия. Использование аннотация является мощным средством, избавляющим программиста от настройки приложения посредством редактирования дескрипторов поставки.

Кроме того каждая версия Java EE (на момент написания материала последней версией была Java EE7 и вышел ранний черновой релиз Java EE8) использует огромный ряд новых технологий, с которыми можно познакомиться на сайте Oracle по адресу www.oracle.com/technetwork/java/javaee/tech/index-jsp-142185.html

Приложение уровня предприятия на платформе Java Enterprise Edition представляет из себя многоуровневое приложение. Использование нескольких уровней позволяет программно разделить приложение на функционально независимые части (рис. 8.4). Обычно многоуровневые приложения имеют клиентский уровень, уровень бизнес логики и уровень связи с данными.

Рис. 8.4. Архитектура Java EE приложения

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

Следует отметить, что платформы Java непосредственно не предоставляет каких-либо реализаций, а представляют лишь большой набор спецификаций, которым должны удовлетворять программные продукту вендоров – фирм разработчиков приложений под конкретные платформы Java. Так на сегодняшний момент существует большое количество платных и бесплатных Java EE.

Любой Java EE сервер реализует модель «компонет-контейнер». В этой модели сервер предоставляет контейнер, в который устанавливается (с учетом десктриптора поставки) соответствующий компонент, созданных разработчиком приложения. В общем случае Java EE сервер предоставляет два вида контейнеров: web контейнеры (реализуется web уровень) и EJB контейнеры (реализуется уровень бизнес-логики).

В соответствии с рисунком 8.4., Java EE приложение может содержать следующие основные компоненты:

    компоненты Web уровня:

    • Servlets. Сервлеты – экземпляры классов, написанные на языке Java и удовлетворяющие спецификации Java Servlets. Представляют из себя элементы самой первой технологии web уровня. На сегодняшний день используются в различных фреймворках, строящих приложения по шаблону ММС2;

      JSP – Java Server Pages – компоненты, представляющие из себя текстовые файлы, которые компилируются в сервлеты исполняемой средой. Более адаптированы для работы с различными языками разметки (HTML, XML и т.п.);

      компоненты JavaServer Faces technology – технология для реализации пользовательского интерфейса;

    компоненты уровня бизнес логики, включают в себя компоненты, удовлетворяющие спецификации Java Enterprise Bean (EJB) и Java Persistence API (JPA). Как отмечалось выше, EJB компоненты отвечают за реализацию бизнес-логики приложения, а JPA компоненты – за обмен с базами данных.

Таким образом мы видим, что набор технологий, которые предоставляет платформа Java EE позволяет разрабатывать сложные, масштабируемые, безопасные приложения. Подробно технология разработки приложений уровня предприятия на платформе Java Enterprise Edition будет изучаться в следующих курсах.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: