Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Архитектура Отладчика Платформы Java™ -
Интерфейсы Поставщика услуг

J2SE 5.0 добавляет новые интерфейсы поставщика услуг к Интерфейсу Отладки Java (JDI) так, чтобы Соединитель и реализации TransportService могли быть разработаны и развернуты. TransportService является новый class в 5.0. Это представляет базовую транспортную службу, используемую Соединителем, и используется, чтобы установить соединения и транспортный Протокол Провода Отладки Java (JDWP) пакеты между отладчиком и целевым VM.

В дополнение к новым интерфейсам поставщика услуг в JDI J2SE 5.0 также включает новый транспортный интерфейс библиотеки, названный Транспортным Интерфейсом Протокола Провода Отладки Java™ (jdwpTransport). Это - собственное (C/C++) интерфейс, чтобы позволить разработку и развертывание транспортных библиотек. Транспортная библиотека загружается стороной отлаживаемой программы агент JDWP и пользуется, чтобы установить соединение с отладчиком и транспортировать пакеты JDWP между отладчиком и VM.

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


Сценарии в качестве примера

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

Данный вышеупомянутый class пользователя следующее описывает много сценариев, где новые интерфейсы могли бы использоваться.


Разработка Соединителя

Разработка Соединитель включает создание конкретной реализации LaunchingConnector, AttachingConnector, или ListeningConnector.

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

Соединители не обязаны использовать TransportService. Некоторые Соединители могут соединить с целевым VM использование механизма кроме транспорта (в разделе Сценариев В качестве примера, мы перечисляем примеры AttachingConnectors, которые присоединяют, чтобы разрушить дампы или подвешенные процессы). Для Соединителей, которые используют реализацию TransportService, Соединитель может или сослаться на реализацию TransportService непосредственно или это может загрузить реализацию во времени выполнения. Соединители, которые хотят использовать Sun, если транспорты должны загрузить транспортную службу, используя код, такой как следующее:

try {
    Class c = Class.forName("com.sun.tools.jdi.SocketTransportService");
    ts = (TransportService)c.newInstance();
} catch (Exception x) {
    throw new Error(x);
}

Java реализации SE не обязаны включать сокет Sun или реализации транспортной службы разделяемой памяти так в вышеупомянутом примере Ошибка, будет брошен, если транспортная служба не будет существовать.

Предполагая, что тип Соединителя известен тогда, следующие элементы должны быть отмечены, разрабатывая реализацию:

Исходный код для примера LaunchingConnector может быть найден здесь. У Соединителя есть единственный Соединитель. Параметр под названием class, который определяет имя class class, чтобы работать в целевом VM. Пример демонстрирует все вышеупомянутые точки включая Соединитель. Параметр, транспортное именование, и использование createVirtualMachine метода.


Развертывание Соединителя

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

Конфигурационный файл службы, который должен быть включен в файл фляги, называют META-INF/services/com.sun.jdi.connect.Connector. Файл просто перечисляет полно квалифицированные имена class Соединителя, включенного в файл фляги. Многократные реализации Соединителя могут быть включены в тот же самый файл фляги, и в этом случае имя class для каждого Соединителя перечисляется на отдельной строке.

Предположите, что мы хотим развернуть запускающийся соединитель под названием SimpleLaunchingConnector. Чтобы развернуть это, мы создаем файл META-INF/services/com.sun.jdi.connect.Connector подобный следующему:

# Our very simple launching connector
SimpleLaunchingConnector

Этот конфигурационный файл службы тогда упаковывается в файл фляги наряду с классами, которые включают реализацию Соединителя:

jar cf SimpleLaunchingConnector.jar \
    META-INF/services/com.sun.jdi.connect.Connector \
    SimpleLaunchingConnector.class

Файл фляги тогда копируется в расположение, которое видимо к системе загрузчик class.

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


Разработка TransportService

Разработка транспортной службы требует разработки двух компонентов:-

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

Принятие деталей транспортного и базового протокола связи понимается тогда, следующий шаг должен рассмотреть следующее:

Однажды вышеупомянутое были разрешены, затем создавая TransportService, включает расширение com.sun.jdi.connect.spi. TransportService и обеспечение реализации. Присоединение и признает, что методы возвращают экземпляр com.sun.jdi.connect.spi. Соединение так реализация Соединения требуется так, чтобы отладчик мог обмениваться пакетами JDWP с отлаживаемой программой.

Как пример реализации TransportService исходный код для транспорта сокета Sun может быть найден здесь. Это обеспечивается в ссылочных целях только.

Разработать собственную транспортную библиотеку требует реализации каждой из функций, перечисленных в jdwpTransport спецификации. Прототипы функции и определения определяются в ${java_home}/include/jdwpTransport.h.

Транспортный разработчик библиотеки компилирует и соединяет функциональные реализации в динамическую библиотеку (или эквивалентный). Библиотека экспортирует функцию jdwpTransport_OnLoad функция, которую вызовет агент JDWP, когда транспортная библиотека будет загружена. Некоторые встроенные среды не поддерживают динамическое подключение, и в таких средах транспортная библиотека, возможно, должна быть статически соединена. В этом случае нет никакой загрузки библиотеки, но функция jdwpTransport_OnLoad будет все еще вызвана, чтобы инициализировать транспортную библиотеку и получить указатель среды.

Как пример jdwpTransport реализации исходный код для транспортной библиотеки сокета Sun (dt_socket) может быть найден здесь. Это обеспечивается в ссылочных целях только.


Развертывание TransportService

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

Конфигурационный файл службы, который должен быть включен в файл фляги, называют META-INF/services/com.sun.jdi.connect.spi.TransportService. Согласно развертыванию Соединителя конфигурационный файл может перечислить имена классов многократных реализаций транспортной службы, когда файл фляги включает многократные реализации.

В случае транспортной службы com.sun. SerialTransportService тогда конфигурационный файл службы будет подобен следующему:-

# Serial line transport
com.foo.SerialTransportService

Этот конфигурационный файл службы тогда упаковывается в файл фляги наряду с классами, которые включают реализацию. Для этого примера мы предположим, что реализация включает много классов:-

jar cf SerialTransportService.jar \
    META-INF/services/com.sun.jdi.connect.spi.TransportService \
    com/foo/SerialTransportService.class \
    com/foo/SerialConnection.class \
    com/foo/SerialCapabilities.clas \
    com/foo/SerialIO.class \
    com/foo/SerialProtocol.class 

Согласно развертыванию Соединителей, файл фляги тогда копируется в расположение, которое видимо к системе загрузчик class.

TransportService может иметь собственные методы или положиться на другие API, которые требуют собственной библиотеки. В этом случае собственная библиотека должна быть расположением, которое позволяет ей быть загруженным, используя System.loadLibrary.

Собственная транспортная библиотека загружается агентом JDWP. В должен быть расположен на нормальном пути поиска библиотеки времени выполнения для операционных систем. Например, на Солярисе или системах Linux это должно быть на пути поиска, определенном переменной окружения LD_LIBRARY_PATH.


Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами