我正在使用OSGi-(felix),SpringDM,hibernate,maven的项目.当我安装bundle时,没关系,我运行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,org.springframework.transaction.annotation;version="[2.5,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,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)
解决方法
您是否在容器(Felix)中安装了此捆绑包?
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.6.ga</version> </dependency>
如果没有安装它,然后看看你开始捆绑时会发生什么.