【问题标题】:Unresolved constraint in bundle, missing requirement osgi.wiring.package捆绑包中未解决的约束,缺少要求 osgi.wiring.package
【发布时间】:2023-03-12 07:40:01
【问题描述】:

我有一个使用 OSGi-(felix)、SpringDM、hibernate、maven 的项目。当我安装包时,没关系,当我运行 bundle id 时的输出是:

LastModified         1384619994484
Headers              [Manifest-Version=1.0, Bundle-Vendor=NguyenVinhLinh, Bnd-LastModified=1384619954778, Tool=Bnd-2.1.0.20130426-122213, Bundle-Name=DrugManager, Built-By=nguyenvinhlinh, Import-Package=org.hibernate,org.hibernate.classic,org.hibernate.criterion,org.springframework.beans.factory;version="[2.5,3)",org.springframework.core.io;version="[2.5,3)",org.springframework.transaction.annotation;version="[2.5,3)", Bundle-SymbolicName=DrugManagerDAO, Export-Package=drug,drugGroup,model;version="1.0.0", Bundle-Version=1.0.0, Build-Jdk=1.7.0_45, Created-By=Apache Maven Bundle Plugin, Bundle-ManifestVersion=2]
BundleContext        null
Revisions            [169.0]
BundleId             169
SymbolicName         DrugManagerDAO
RegisteredServices   null
ServicesInUse        null
Version              1.0.0
Location             file:/home/nguyenvinhlinh/Projects/felix-framework-4.2.1/bundle/DrugManager-1.0.jar
State                2
Bundle                 169|Installed  |    1|DrugManagerDAO (1.0.0)

这是我在启动此捆绑包时看到的:

org.osgi.framework.BundleException: Unresolved constraint in bundle DrugManagerDAO [169]: Unable to resolve 169.0: missing requirement [169.0] osgi.wiring.package; (osgi.wiring.package=org.hibernate)

这是我的 beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
   http://www.springframework.org/schema/osgi
   ">

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingDirectoryLocations" ref="mappingProvider"/>
        <property name="hibernateProperties" ref="propertiesProvider"/>
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/WOLOLO"/>

        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <bean id="mappingProvider" class="hibernate.config.HibernateMappingProvider"/>
    <bean id="propertiesProvider" class="hibernate.config.HibernatePropertiesProvider"/>

    <bean id="drugDao" class="drug.HibernateDrugDao">
        <property name="clazz" value="model.Drug"/>
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
     <bean id="drugGroupDao" class="drugGroup.HibernateDrugGroupDao">
        <property name="clazz" value="model.DrugGroup"/>
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <osgi:service ref="drugDao" interface="drug.DrugDao"/>
    <osgi:service ref="drugGroupDao" interface="drugGroup.DrugGroupDao"/>
</beans>

这是我的 pom 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>DrugManager</groupId>
    <artifactId>DrugManager</artifactId>
    <version>1.0</version>
    <packaging>bundle</packaging>


    <dependencies>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.3.0</version>
        </dependency>

        <dependency>
            <groupId>hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>1.8.0.10</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>20030825.184428</version>
        </dependency>
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>20030825.183949</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
            <version>3.2.6.ga</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.27</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.4.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>DrugManagerDAO</Bundle-SymbolicName>
                        <Bundle-Vendor>NguyenVinhLinh</Bundle-Vendor>
                        <Export-Package>"drug,drugGroup,model"</Export-Package>
                        <Import-Package>org.hibernate</Import-Package> <!-- this line I try to insert into to fix requirement, but it does'nt work-->
                    </instructions>
                </configuration>

            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>java.net</id>
            <url>http://download.java.net/maven/2/</url>
        </repository>
    </repositories>


</project>

另外,felix中的bundle存在完成错误。

g! ERROR: Bundle DrugManagerDAO [190] Error starting file:DrugManager-1.0.jar (org.osgi.framework.BundleException: Unresolved constraint in bundle DrugManagerDAO [190]: Unable to resolve 190.0: missing requirement [190.0] osgi.wiring.package; (osgi.wiring.package=org.hibernate))
org.osgi.framework.BundleException: Unresolved constraint in bundle DrugManagerDAO [190]: Unable to resolve 190.0: missing requirement [190.0] osgi.wiring.package; (osgi.wiring.package=org.hibernate)
    at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
    at java.lang.Thread.run(Thread.java:744)

【问题讨论】:

    标签: java maven osgi apache-felix spring-dm


    【解决方案1】:

    对于缺少的需求 [Bundle-number] osgi.wiring.package, 我在 pom.xml 中将其添加为 export-package,如下所述:

    <Export-Package>
    package for which error is thrown
    </Export-Package>
    

    它奏效了。 因此,即使在将其声明为依赖项后仍抛出上述错误,export-package 可能会有所帮助

    【讨论】:

      【解决方案2】:

      您的容器 (Felix) 中是否也安装了此捆绑包?

           <dependency>
              <groupId>org.hibernate</groupId>
              <artifactId>hibernate</artifactId>
              <version>3.2.6.ga</version>
          </dependency>
      

      如果不安装它,然后看看当你启动你的包时会发生什么。

      【讨论】:

      • 我现在使用的是 felix-framework-4.2.1。根据您的回复,我应该添加:hibernate-3.2.6.ga.jar hibernate-core-3.5.6-Final.jar 在目录中:felix-framework-4.2.1/bundle。你是这个意思吗? @托尼
      • 是的,你安装你的包的方式你应该在同一个容器中以同样的方式安装休眠包;因此,当您列出正在运行的捆绑包时,您会看到它们。这将注册 hibernate 包提供的服务,您的服务将获取它。
      • 您是否有命令,例如您的容器中可用的“标题”?我在 Apache Karaf 中使用它,当我在容器中没有依赖的东西时,我已经看到了您遇到的确切错误。发生的情况是,标题将显示导入和导出,并以红色突出显示我缺少的那个(通常只有一个)。
      • 你告诉我添加的那些包,当我使用命令“lb”作为列表包时:我得到了类似'code' 225|Active | 1|file:/home/nguyenvinhlinh/Projects/felix-framework-4.2.1/bundle/hibernate-3.2.6.ga.jar (0.0.0) 'code' 看起来,这些包在 Felix 上下文中运行很奇怪.因为当我看到“RegisteredService”和“ServiceInUse”的信息时,这些都是空的。
      • 谢谢托尼!我现在明白菲利克斯了。我可以做到 :D 现在,我正在下载依赖包
      猜你喜欢
      • 2023-03-26
      • 2015-07-28
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2018-05-10
      • 2019-09-15
      • 2018-09-29
      • 2018-06-21
      相关资源
      最近更新 更多