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 для того, чтобы отладить бобы.