|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот документ включает следующие темы:
Глава Приложений В качестве примера описывает два приложения в качестве примера.
Мост ActiveX позволяет компонентно-ориентированному на JavaBeans (ТМ) компонентная архитектура ("боб") быть эффективно упакованным как элемент управления ActiveX, таким образом позволяя это использоваться в качестве функционального компонента в контейнере ActiveX.
Отметьте, что эта реализация Моста ActiveX, возможно, не является совместимой с предыдущей реализацией для SDK/JRE 1.1 до 1.3.1. Чтобы использовать новый мост, бобы должны будут быть повторно упакованы.
В целях разработки эта реализация поддерживает следующее OSs и Контейнеры ActiveX:
OSs: Windows NT, 2000, XP.
Контейнеры ActiveX: Visual Studio 6.0 с SP3.
Отметьте, что упакованные бобы должны работать на любой платформе Windows и в любом контейнере ActiveX — не только те платформы и упомянутые выше контейнеры.
|
Примечания 1. Выполнение поставщика программного блока (
2. Для |
Использовать packager.exe к сгенерированному .dll для боба.
Использование packager.exe следующие:
|
.dll может содержать только один упакованный боб. Таким образом, отдельное .jar файл требуется для каждого боба..jar файл зависит от другого .jar файл или .class файл (ы), тогда Вы должны будете установить CLASSPATH.<jar file name> потребности включать путь к .jar файл. Путь может быть всем или относительным.<bean name> потребности быть полностью определенным именем пакета боба (например, sunw.demo.jelly.JellyBean.).-clsid опция не используется, упакованный боб CLSID будет сгенерирован в произвольном порядке. Это -clsid опция позволяет Вам определять то же самое CLSID для данного боба каждый раз.-out определяется, packager.exe генерирует .dll заполните тот же самый каталог, в котором это выполняется. Если Вы определяете -out параметр, тогда packager места .dll файл в каталоге Вы определяете. Например, Вы могли бы хотеть поместить .dll в вызванном каталоге <jre_home>\axbridge\bin где это могло быть развернуто с приложением. (Отметьте это <jre_home> был бы общедоступный JRE, не частный. Общедоступный JRE на Windows обычно располагается в C:\Program Files\Java\j2re1.4.2. Частный JRE, связанный с SDK, обычно располагается в C:\j2sdk1.4.2\jre.)-out не определяется, или -out не определяет <jre_home>\axbridge\bin, тогда -reg опция не должна использоваться.Например, предположить <bean>.jar jelly.jar; jelly.jar располагается в C:\my_bean_jars; полностью определенное бобовое имя sunw.demo.jelly.JellyBean; и SDK j2sdk1.4.2. Вы могли работать packager.exe следующим образом:
C:\j2sdk1.4.2\bin\packager -clsid {D824B185-AE3C-11D6-ABF5-00B0D07B8581}
-out C:\Program Files\Java\j2re1.4.2\axbridge\bin
-reg C:\my_bean_jars\jelly.jar sunw.demo.jelly.JellyBean
Поставщик программного блока был бы:
.dll файл с бобовым именем (JellyBean.dll) и вставленный в это j2re\axbridge\bin каталог;j2re1.4.2\axbridge\lib каталог и место jelly.jar там;.dll с CLSID
D824B185-AE3C-11D6-ABF5-00B0D07B8581..dllЕсли Вы не используете -reg опция с packager.exe как показано выше, можно вручную зарегистрироваться .dll с regsvr32.exe. cd к каталогу, где .dll файл располагается (например, C:\Program Files\Java\j2re1.4.2\axbridge\bin) и введите:
<path_regsvr32>\regsvr32 <bean name>.dll
Предположите, что Вы выполняете Windows 2000. regsvr32.exe располагается в C:\winnt\system32 на Windows 2000. Затем зарегистрироваться JellyBean.dll Вы сделали бы это:
C:\Program Files\Java\j2re1.4.2\axbridge\bin>C:\winnt\system32\regsvr32 JellyBean.dll
Это будет:
CLSID ключ реестра для JellyBean.dll под HKEY_CLASSES_ROOT;j2re1.4.2\axbridge\lib каталог и место jelly.jar там.Теперь, когда боб регистрируется как элемент управления ActiveX, следует быть в состоянии вставить его в контейнер ActiveX. В случае Тестового Контейнера элемента управления ActiveX, который идет с Visual Studio в главном меню, идут в Edit>Insert New Control... и прокрутите список вниз, пока Вы не находите бобовое управление. В случае JellyBean.dll управление, это обнаруживается как JellyBean Bean Control. Ниже этого показывается вставленным в тестовый контейнер Visual Studio.

Чтобы развернуть боб, упакованный как элемент управления ActiveX в приложении, Вы должны будете включать регистрацию .dll как часть процесса установки. .dll должен быть установлен в <jre_home>axbridge\bin каталог, и это должно быть зарегистрировано там с regsvr32.exe. Как утверждено ранее, когда .dll регистрируется, боб .jar будет помещен в <jre_home>\axbridge\lib каталог.
Объекты Java доступны через объекты обертки, поддерживающие IDispatch интерфейс; то есть, к ним получают доступ косвенно через Мост ActiveX. Например, если Вы работаете с упакованным бобом в Visual Basic (VB) и хотите передать объект Java как параметр бобовому методу, необходимо, чтобы любой (1) у боба был метод, который возвращает необходимый тип объекта Java; или (2) объект Java доступен как бобовое свойство.
Например, рассмотрите календарный пример, JCalendarPanel, в главе В качестве примера.
Если бы Вы работали непосредственно в Java с этим бобом, то Вы создали бы a Date объект, набор его свойства, затем передает это как параметр setSelectedDate() метод JCalendarePanel. Путем это делается с Мостом ActiveX следующим образом:
Принятие Вас работает в VB и имеет экземпляр JCalendarPanel вызванный JCalendarPanel1, в VB Вы могли использовать JCalendarPanel1.selectedDate свойство, чтобы получить a Date объект:
Set dat = JCalendarPanel1.selectedDate
Затем Вы использовали бы методы VB Date объект (dat) установить это. Например:
dat.setYear (1986 - 1900) dat.setMonth (11 - 1) dat.setDate 24
Наконец, Вы использовали бы setSelectedDate метод JCalendarPanel1 назначать дату:
JCalendarPanel1.setSelectedDate dat
Все методы, обеспеченные BeanInfo через getMethodDescriptors() доступны от контейнеров ActiveX.
Однако, если метод будет перегружен, то только метод, который берет самое большое количество параметров, будет доступен. Это - то, потому что IDL COM не поддерживает перегрузку. Однако, значение аргумента и тип возвращаемого значения будут VARIANT. Каждый параметр является дополнительным. Для любого перегруженного метода Вы должны будете сослаться на бобовую документацию, чтобы знать точное число параметров и их типов. Отбрасываются методы или имена свойства, которые идентичны любому ключевому слову MIDL.
Все свойства доступны хотя мост с тем же самым правом доступа как определено в BeanInfo через PropertyDescriptor. Мост ActiveX вызовет методы средства доступа как определено в PropertyDescriptor.
Если бобовое свойство bound или constrained, bindable или requestedit флаги устанавливаются в атрибутах свойства COM. Контейнер уведомляется относительно изменения свойства через IPropertyNotifySink интерфейс. Если свойство ограничивается, и контейнер отрицает изменение свойства, то боб PropertyVetoException бросается мостом.
Для типов примитивов и для строки, шрифта, и свойств цвета, большинство контейнеров ActiveX как Visual Basic позволит непосредственному управлению войти свойствами их PropertySheet. Для всех других свойств, таких как массивы или объекты, свойства не будут доступны в PropertySheet но может все еще быть вызван через язык сценариев, связанный с контейнером.
Мост будет поддерживать четыре свойства окружения, которые преобразовываются в бобовые свойства, если бобовый компонент реализует эти свойства. Эти свойства окружения будут считаны и установлены на бобовом компоненте, когда компонент будет инициализирован и каждый раз, когда уведомление об изменении для свойств окружения получается.
DISPID_BACKCOLOR DISPID_FORECOLOR DISPID_FONT DISPID_ENABLED
Мост передаст изменения свойства окружения контейнера ActiveX к бобу через установку свойств.
Все исходные интерфейсы, которые объявляются как значение по умолчанию в EventSetDescriptor массив, возвращенный BeanInfo будет объединен в один интерфейс, который объявляется как являющийся исходным интерфейсом значения по умолчанию ActiveX. Это - требование ActiveX, чтобы, по крайней мере, исходный интерфейс значения по умолчанию был доступен контейнерами ActiveX.
Каждый метод, возвращенный getListenerMethodDescriptors API EventSetDescriptor отображается на событие ActiveX. Имя события является именем метода. Так как все интерфейсы значения по умолчанию бобов объединяются с уникальным интерфейсом, интерфейсы, которые содержат то же самое имя метода, не позволяются.
Рассмотрите, например java.awt.event.ActionListener исходный интерфейс:
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
Имя события ActiveX, сгенерированное из этого определения интерфейса, actionPerformed. Например, в случае Visual Basic подпись события похожа на это:
Private Sub Button_actionPerformed (ByVal evt As Object) MsgBox evt.toString End-Sub
evt если к контейнеру объект автоматизации, который представляет java.awt.AWTEvent
Object. Контейнеры могли получить доступ к информации о событии, вызывая методы, поддерживаемые AWTEvent class.
Боб, упакованный как элемент управления ActiveX, будет частью автономного приложения. Следовательно это будет выполняться вне модели обеспечения безопасности поля песка апплета.
В сценариях Internet Explorer боба не безопасно, поскольку это предоставили AllPermission разрешение.
Отметьте, что можно сконфигурировать JVM через Панель управления Java. Следующие вкладки относятся к Мосту ActiveX:
Можно использовать Консоль Java для того, чтобы отладить бобы.