OSGi组件是否具有元类型并且在SCR中没有属性非法状态?

时间:2018-02-19 19:52:31

标签: java osgi apache-felix

假设在示例中使用了SCR Annotations。考虑上课:

@Component(metatype = true, label = "This is my ACME class implementation)
public class AcmeImpl implements Acme {}

元类型描述符接近:

<?xml version="1.0" encoding="UTF-8"?><metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/com.my.AcmeImpl">
    <OCD id="com.my.Acme" name="%com.my.Acme.name" description="%com.my.AcmeImpl.description"/>
    <Designate pid="com.my.AcmeImpl">
        <Object ocdref="com.my.Acme"/>
    </Designate>
</metatype:MetaData>

问题是,关于MetaData scheme

<complexType name="OCD">
    <sequence>
        <element name="AD" type="metatype:AD" minOccurs="1" maxOccurs="unbounded" />
        <element name="Icon" type="metatype:Icon" minOccurs="0" maxOccurs="1" />
    </sequence>
    <!-- not important part -->
</complextType>

因此,AD中缺少OCD节点会使此元类型无法使用,并且不会出现在OSGi Felix Web控制台中。值得一提的是,添加任何非私有Property注释会导致添加一个AD节点,从而使方案得到正确验证,并且可以在Felix Web控制台端创建配置。

没有任何属性的状态在其他任何地方都没有被明确禁止,并且应该在Apache SCR Maven plugin处理期间抛出错误。那背后有什么理由吗?如何在不向Component添加Property的情况下仍然可以配置此Select distinct G.Game_Name From Game_Details G Where G.Game_Id in ( Select Game_Id From WC_Info W Where W.WC_Won=0 And Country_Name in ('India', 'England','France', 'Italy') Group By Game_Id Having Count( distinct Country_Name ) = 4 );

0 个答案:

没有答案