使用 Helper 的方法编写注册信息

From Apache OpenOffice Wiki
Jump to: navigation, search


UNO 组件必须使用服务管理器的注册表数据库注册。在办公软件安装中,这是用于所有预设服务的文件 types.rdb(在 1.1.0 之前为 applicat.rdb)。服务管理器可以使用此数据库查找服务的实现。例如,如果您的组件的实例使用以下调用创建。

  Object imageShrink = 
  xRemoteServiceManager.createInstance("org.openoffice.test.ImageShrink");


服务管理器使用给定的服务名称或实现名称,在注册表中查找相应的 jar 文件,并实例化组件。


Documentation note.png 如果要使用 Java UNO 运行时的服务管理器 com.sun.star.comp.servicemanager.ServiceManager (jurt.jar) 来实例化服务实现,那么必须创建服务管理器,并以编程方式添加 “org.openoffice.test.ImageShrink” 的工厂,因为 Java 服务管理器不使用注册表。

或者,您还可以使用基于注册表的 juh.jar 中的 com.sun.star.comp.helper.RegistryServiceFactory。但其缺点是它通过 Java 桥委托给服务管理器的 C++ 实现。


在注册的过程中,组件将向注册表中写入必要的信息。当客户端调用组件的 __writeRegistryServiceInfo() 方法时,将从外部触发写入信息的过程。

  public static boolean __writeRegistryServiceInfo(XRegistryKey regKey)


调用程序将传送该方法用来写入注册表条目的 com.sun.star.registry.XRegistryKey 接口。同样,FactoryHelper 类提供了实现方法的方式:

  ...
 
  // static __writeRegistryServiceInfo implementation
  public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
 
      return FactoryHelper.writeRegistryServiceInfo( ImageShrink.class.getName(), 
      __serviceName, regKey); 
  }


writeRegistryServiceInfo 方法接受三个参数:

  • 实现名称
  • 服务名称
  • XRegistryKey


使用工具(如 regcomp)或使用 Java 应用程序 com.sun.star.tools.uno.RegComp 来注册组件。这些工具可以接受包含组件的 jar 文件的路径作为参数。由于 jar 可以包含多个类,实现 __writeRegistryServiceInfo() 方法的类必须通过标明的方式指出。同样,RegistrationClassName 条目将确定正确的类。例如:

 RegistrationClassName: org.openoffice.comp.test.ImageShrink

上述条目对于确定提供 __getServiceFactory() 的类的位置也是非常必要的,因此函数 __writeRegistryServiceInfo()__getServiceFactory() 必须在同一类中。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages