首页 > 解决方案 > wso2 am 3.2 自定义 osgi 部署失败

问题描述

我按照通常的教程创建了一个自定义 UserStore。
我尝试覆盖 org.wso2.carbon.user.core.jdbc.JDBCUserStoreManager。
我的 CustomUserStoreManager 是扩展 AbstractUserStoreManager 的 JDBCUserStoreManager 的副本。

我以这种方式创建了一个 CustomUserStoreMgtDSComponent

@Component(name = "custom.user.store.mgt.dscomponent", immediate = true)
public class  CustomUserStoreMgtDSComponent {

    private static Log log = LogFactory
            .getLog(CustomUserStoreMgtDSComponent .class);

    private static RealmService realmService;

    // @Activate
    protected void activate(ComponentContext ctxt) {
        log.info("CustomUserStoreMgtDSComponent bundle start activate...");
        CustomUserStoreManager customUserStoreManager = new CustomUserStoreManager();
        ctxt.getBundleContext().registerService(
                UserStoreManager.class.getName(), customUserStoreManager, null);
        log.info("CustomUserStoreMgtDSComponent bundle activated successfully.");
    }

    @Deactivate
    protected void deactivate(ComponentContext ctxt) {
        if (log.isDebugEnabled()) {
            log.debug("Custom User Store Manager is deactivated ");
        }
    }

    @Reference(name = "user.realmservice.default", 
            cardinality = ReferenceCardinality.MANDATORY,
            policy = ReferencePolicy.DYNAMIC, unbind = "unsetRealmService")
    protected void setRealmService(RealmService rlmService) {
        realmService = rlmService;
    }

    protected void unsetRealmService(RealmService realmService) {
        realmService = null;
    }

}

这是插件调用:

    <carbon.version>4.6.0</carbon.version>
    <carbon.user.imp.pkg.version>[4.0.0,5.0.0)</carbon.user.imp.pkg.version>
    <osgi.framework.imp.pkg.version.range>[1.7.0, 2.0.0)</osgi.framework.imp.pkg.version.range>
    <osgi.service.component.imp.pkg.version.range>[1.2.0, 2.0.0)</osgi.service.component.imp.pkg.version.range>
    [...]
    <plugin>
       <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <!-- <version>5.1.2</version> -->
        <version>3.4.0</version>
        <extensions>true</extensions>
        <configuration>
            <instructions>
            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
            <Bundle-Name>${project.artifactId}</Bundle-Name>
            <Private-Package>org.custom.wso2.userstore.internal</Private-Package>
            <Export-Package>
                !org.custom.wso2.userstore.internal,
                org.custom.wso2.userstore.*;version="${project.version}"
            </Export-Package>
            <Import-Package>
                org.wso2.carbon.user.api.*;version="${carbon.user.imp.pkg.version}",
                org.wso2.carbon.user.core.*;version="${carbon.user.imp.pkg.version}",
                org.osgi.framework.*;version="${osgi.framework.imp.pkg.version.range}",
                org.osgi.service.component.*;version="${osgi.service.component.imp.pkg.version.range}"
            </Import-Package>
            <DynamicImport-Package>*</DynamicImport-Package>
            </instructions>
        </configuration>
    </plugin>

当我使用 maven-bundle-plugin:5.2.0 时,我可以构建一个 jar 放入存储库/组件/dropins 中的 dockerized wso2 apim 中(maven-bundle-plugin:3.xx 不起作用并且有内部异常)

当我重新启动 APIM 时,我可以看到 wso2 更改了我的 jar 以修改 MANIFEST 文件。日志说:

!ENTRY org.custom.wso2.userstore 4 0 2021-05-03 13:05:02.202 !MESSAGE FrameworkEvent ERROR !STACK 0 org.osgi.framework.BundleException:无法解析模块:org.custom.wso2.userstore [238 ] 未解决的需求:Import-Package: org.osgi.service.component; 版本="[1.3.0,2.0.0)"; resolution:="optional" 未解决的需求:Require-Capability: osgi.extender; filter:="(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))"

无论我在插件调用中设置什么,MANIFEST 文件都被修改为引用:

    Import-Package: org.osgi.service.component; version="[1.3.0,2.0.0)"; resolution:="optional"
    Unresolved requirement: Require-Capability: osgi.extender; filter:="(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))"

部署失败。

问题出在哪里 ?

标签: mavenwso2-amapim

解决方案


推荐阅读