多くのサービスがオプションであるDSコンポーネントを起動したい場合、サービスが起動していない場合、したがって、これらのオプションのサービスのカーディナリティをオプションとして設定します。したがって、これらのオプションのサービスが利用できない場合は、ターゲットコンポーネントもアクティブにすることができます。OSGi-DS:DSコンポーネントの必須サービスへの参照(実際には動的に更新可能ではありません)
しかし、私は有効にこれらのオプションサービスのいずれかの設定を変更し、そのサービスが利用可能になるが、それはここでは、そのターゲット・コンポーネントに
@Component(immediate = true, configurationPolicy = ConfigurationPolicy.IGNORE,name="directory.comp")
public class DirectoryControllers
{
@Reference(policy=ReferencePolicy.DYNAMIC)
private volatile IZimbra zimbra;
@Reference(policy=ReferencePolicy.DYNAMIC,cardinality=ReferenceCardinality.OPTIONAL)
private volatile IOpenDJ opendj;
@Reference(policy=ReferencePolicy.DYNAMIC,cardinality=ReferenceCardinality.OPTIONAL)
private volatile IOpenIDM openidm;
private ServletRegistration _registration;
@Activate void activate(BundleContext bc) throws ServletException, NamespaceException
{
AppProvisioners provisioners=new AppProvisioners(zimbra,openidm,opendj);
_registration = ServletRegistration.register(
bc, _httpService, "/middleware",
new ProvisioningController(_db,provisioners),
new UserEnrollmentController(_db,provisioners)
);
}
}
が反映されません場合は、今の問題は、Zimbraのコンポーネントはそれほどオプションではありません私は設定を変更するたびにDirectoryControllersコンポーネントの影響を受けますが、openidm、opendjコンポーネントには当てはまりません。もちろん、オプションですが、有効な設定を変更するとDirectoryControllersコンポーネントの影響を受けません。
私も試しましたバインド/アンバインド:
private volatile IOpenIDM openidm;
@Reference(name = "openidm.service", service = IOpenIDM.class, cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, unbind = "unbindOpenIDMService")
public void bindOpenIDMService(IOpenIDM openidm) {
this.openidm = openidm;
}
public void unbindOpenIDMService(IOpenIDM openidm) {
this.openidm = null;
}
この問題の原因となるものがありませんか?
ありがとうございます。
いいえ、それは役に立ちません:\t @Reference(Policy = ReferencePolicy.DYNAMIC、cardinality = ReferenceCardinality .OPTIONAL、policyOption = ReferencePolicyOption.GREEDY) \tプライベート揮発性IOpenIDM openIDM; –
ありがとうBJ、静的な参照を作成すると動作します:@Reference(policy = ReferencePolicy.STATIC ...) –