Liferay 在OSGI组件声明中使用属性

Liferay 在OSGI组件声明中使用属性,liferay,osgi,liferay-7,Liferay,Osgi,Liferay 7,在我的模块中,在OSGI组件声明中,我需要使用portal-ext.properties中的属性,如下所示: @Component( immediate = true, property = { "dispatcher=FORWARD", "dispatcher=REQUEST", "servlet-context-name=", "servlet-filter-name=Detail UC Filter", "url-pattern=/web/guest/" + PropsUtil.get("

在我的模块中,在OSGI组件声明中,我需要使用portal-ext.properties中的属性,如下所示:

@Component(
immediate = true,
property = {
"dispatcher=FORWARD",
"dispatcher=REQUEST",
"servlet-context-name=",
"servlet-filter-name=Detail UC Filter",
"url-pattern=/web/guest/" + PropsUtil.get("myPath") + "/*"
}

但我得到了编译错误:“注释属性Component.property的值必须是常量表达式”。如何在此处使用属性?

您可以使用配置管理配置设置这些属性中的任何一个。 因此,一种方法是使用一个单独的组件为该组件编写配置

您可以使用
configurationPolicy=configurationPolicy.REQUIRE
,以防止在出现此配置之前激活组件


另一种方法是使用组件工厂。请参阅。

您可以使用配置管理员配置设置这些属性中的任何一个。 因此,一种方法是使用一个单独的组件为该组件编写配置

您可以使用
configurationPolicy=configurationPolicy.REQUIRE
,以防止在出现此配置之前激活组件

另一种方法是使用组件工厂。看

但我得到了编译错误:“注释属性Component.property的值必须是常量表达式”。我如何使用这里的物业

条目:

"url-pattern=/web/guest/" + PropsUtil.get("myPath") + "/*"
这就是问题所在。这是因为注释只能具有编译时常量的值。显然,这个属性不是编译时常量,因为它的值取决于调用方法

如果您想在运行时提供属性值,那么您可以在OSGi中使用配置管理来实现这一点。默认情况下,所有声明性服务组件都可以使用pid进行配置,pid为:

  • 通过设置
    @组件(configurationPid=“foo”)
  • 通过设置
    @组件(name=“bar”)
  • 默认使用组件实现的完全限定类名
当您向configuration Admin提供与DS组件的pid匹配的配置字典时,它将绑定到该组件

  • 组件属性将与配置字典合并(配置将覆盖静态属性)。您的组件可以使用
    @Activate
    方法接收此信息
  • 如果组件注册为服务,则服务属性也将更新
  • 如果您的组件有一个
    @Modified
    方法,那么这些更改将是动态的,否则您的组件实例将被停用和丢弃,并创建和激活一个新实例
  • 通过设置组件的配置策略,可以强制组件在提供配置之前不激活。当您有一个需要存在但在运行时之前无法知道的属性时,这非常有用

    @Component(configurationPolicy=ConfigurationPolicy.REQUIRE)
    
    但我得到了编译错误:“注释属性Component.property的值必须是常量表达式”。我如何使用这里的物业

    条目:

    "url-pattern=/web/guest/" + PropsUtil.get("myPath") + "/*"
    
    这就是问题所在。这是因为注释只能具有编译时常量的值。显然,这个属性不是编译时常量,因为它的值取决于调用方法

    如果您想在运行时提供属性值,那么您可以在OSGi中使用配置管理来实现这一点。默认情况下,所有声明性服务组件都可以使用pid进行配置,pid为:

    • 通过设置
      @组件(configurationPid=“foo”)
    • 通过设置
      @组件(name=“bar”)
    • 默认使用组件实现的完全限定类名
    当您向configuration Admin提供与DS组件的pid匹配的配置字典时,它将绑定到该组件

  • 组件属性将与配置字典合并(配置将覆盖静态属性)。您的组件可以使用
    @Activate
    方法接收此信息
  • 如果组件注册为服务,则服务属性也将更新
  • 如果您的组件有一个
    @Modified
    方法,那么这些更改将是动态的,否则您的组件实例将被停用和丢弃,并创建和激活一个新实例
  • 通过设置组件的配置策略,可以强制组件在提供配置之前不激活。当您有一个需要存在但在运行时之前无法知道的属性时,这非常有用

    @Component(configurationPolicy=ConfigurationPolicy.REQUIRE)
    
    -不要横杆不要横杆!