1

在 karaf 3.0.X 到 4.1.1 中尝试来自 karafCookbook 的示例“Chap7-Recipe3-JPA-Only”(参见https://github.com/jgoodyear/ApacheKarafCookbook )时,我收到以下错误:

Missing dependencies:
(&(objectClass=org.apache.aries.blueprint.NamespaceHandler)(osgi.service.blueprint.namespace=http://aries.apache.org/xmlns/jpa/v1.1.0))

我没有找到需要这种依赖关系的地方以及如何解决它。

这是我从新安装的 karaf 4.0.9 键入的命令:

karaf@root()> version
4.0.9
karaf@root()> install -s mvn:org.apache.derby/derbyclient/10.8.1.2
Bundle ID: 52
karaf@root()> feature:install jndi
karaf@root()> feature:install jpa
karaf@root()> install -s mvn:com.packt/jpa-only
JPA-Only Demo Bundle starting...
Bundle ID: 81
karaf@root()> list
START LEVEL 100 , List Threshold: 50
ID | State       | Lvl | Version              | Name
--------------------------------------------------------------------------------------------
52 | Active      |  80 | 10.8.1000002.1095077 | Apache Derby 10.8
60 | Active      |  80 | 3.0.0                | Expression Language 3.0 API
61 | Active      |  80 | 1.2.0                | CDI APIs
62 | Active      |  80 | 1.2                  | javax.interceptor API
63 | Active      |  80 | 1.2                  | javax.transaction API
64 | Active      |  80 | 2.6.0                | Apache Aries JPA Container API
65 | Active      |  80 | 2.6.0                | Apache Aries JPA blueprint
66 | Active      |  80 | 2.6.0                | Apache Aries JPA container
67 | Active      |  80 | 2.6.0                | Apache Aries JPA support
68 | Active      |  80 | 3.2.2                | Apache Commons Collections
69 | Active      |  80 | 2.6                  | Commons Lang
70 | Active      |  80 | 1.6.0                | Commons Pool
71 | Active      |  80 | 1.0.2                | Apache Felix Coordinator Service
72 | Active      |  80 | 1.1.1                | geronimo-jms_1.1_spec
73 | Active      |  80 | 1.1                  | Apache Geronimo JSR-317 JPA 2.0 Spec API
74 | Active      |  80 | 2.4.1                | OpenJPA Aggregate Jar
75 | Active      |  80 | 1.7.0.6              | Apache ServiceMix :: Bundles :: ant
76 | Active      |  80 | 1.4.0.3              | Apache ServiceMix :: Bundles :: commons-dbcp
77 | Active      |  80 | 1.0.0.2              | Apache ServiceMix :: Bundles :: javax.inject
78 | Active      |  80 | 1.14.1.1             | Apache ServiceMix :: Bundles :: serp
79 | Active      |  80 | 4.3.0                | Apache XBean :: ASM 5 shaded (repackaged)
80 | Active      |  80 | 1.0.0.201505202023   | org.osgi:org.osgi.service.jdbc
81 | GracePeriod |  80 | 1.0.0.SNAPSHOT       | Chapter 7 :: Recipe 3 :: JPA-ONLY - 4.0.9
karaf@root()> diag 81
Chapter 7 :: Recipe 3 :: JPA-ONLY - 4.0.9 (81)
----------------------------------------------
Status: GracePeriod
Blueprint
09/06/17 11:13
Missing dependencies:
(&(objectClass=org.apache.aries.blueprint.NamespaceHandler)(osgi.service.blueprint.namespace=http://aries.apache.org/xmlns/jpa/v1.1.0))

最后,我在 pom.xml 中调整了 libs 版本,因此它可以在 4.0.9 中加载:

<?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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>chapter7-recipe3</artifactId>
        <groupId>com.packt</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>jpa-only</artifactId>
    <packaging>bundle</packaging>

    <name>Chapter 7 :: Recipe 3 :: JPA-ONLY - 4.0.9</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.servicemix.bundles</groupId>
            <artifactId>org.apache.servicemix.bundles.commons-dbcp</artifactId>
            <version>1.4_3</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.enterprise</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jpa_2.0_spec</artifactId>
            <version>1.1</version>
        </dependency> 
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa</artifactId>
            <version>2.4.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.8.1.2</version>
            <scope>provided</scope>
        </dependency>

        <!-- custom felix gogo command -->
        <dependency>
            <groupId>org.apache.karaf.shell</groupId>
            <artifactId>org.apache.karaf.shell.console</artifactId>
            <version>4.0.9</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>openjpa-maven-plugin</artifactId>
                <configuration>
                    <addDefaultConstructor>true</addDefaultConstructor>
                    <enforcePropertyRestriction>true</enforcePropertyRestriction>
                </configuration>
                <executions>
                    <execution>
                    <id>enhancer</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>enhance</goal>
                    </goals>
                </execution>
                </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.openjpa</groupId>
                            <artifactId>openjpa</artifactId>
                            <version>2.4.1</version>
                        </dependency>
                        <dependency>
                            <groupId>org.slf4j</groupId>
                            <artifactId>slf4j-api</artifactId>
                            <version>1.6.6</version>
                        </dependency>
                    </dependencies>
            </plugin>


            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>3.3.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Meta-Persistence>META-INF/persistence.xml</Meta-Persistence>
                        <Bundle-Activator>com.packt.jpa.demo.Activator</Bundle-Activator>
                        <Export-Package> 
                            com.packt.jpa.demo.api.* 
                        </Export-Package>
                        <Import-Package>
                            org.osgi.service.blueprint;resolution:=optional,
                            javax.persistence;version="[1.1,2)",
                        javax.persistence.criteria;version="[1.1,2)",
                            javax.sql,
                            org.apache.commons.dbcp;version="[1.4,2)",
                            org.apache.derby.jdbc,
                            org.apache.felix.service.command,
                            org.apache.felix.gogo.commands,
                            org.apache.karaf.shell.console,
                            *
                        </Import-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>    

   <repositories>
       <repository>
          <id>maven2-repository.dev.java.net</id>
          <name>Java.net Repository for Maven</name>
          <url>http://download.java.net/maven/2/</url>
          <layout>default</layout>
       </repository>
   </repositories>

</project>

blueprint.xml 不变,如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<blueprint default-activation="eager"  
           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0"
           xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.1.0">

    <!-- Define RecipeBookService Services, and expose them. --> 
    <bean id="recipeBookService" class="com.packt.jpa.demo.dao.RecipeBookServiceDAOImpl">
        <jpa:unit property="entityManagerFactory" unitname="recipe" />
    </bean>

    <service ref="recipeBookService" interface="com.packt.jpa.demo.api.RecipeBookService" />

    <!-- Standard DataSource -->
    <bean id="dataSource" class="org.apache.derby.jdbc.ClientDataSource" >
       <property name="databaseName" value="demo"/>
       <property name="createDatabase" value="create"/>
    </bean>

    <service id="demoDataSource" ref="dataSource" interface="javax.sql.DataSource">
        <service-properties>
            <entry key="osgi.jndi.service.name" value="jdbc/demo"/>
            <entry key="transactional" value="false"/> 
        </service-properties>
    </service>

    <!-- Apache Karaf Commands -->
    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
        <command>
            <action class="com.packt.jpa.demo.commands.AddRecipe">
                <property name="recipeBookService" ref="recipeBookService"/>
            </action>
        </command>
        <command>
            <action class="com.packt.jpa.demo.commands.RemoveRecipe">
                <property name="recipeBookService" ref="recipeBookService"/>
            </action>
        </command>
        <command>
            <action class="com.packt.jpa.demo.commands.ListRecipes">
                <property name="recipeBookService" ref="recipeBookService"/>
            </action>
        </command>
    </command-bundle>

</blueprint>

任何想法 ?谢谢。

4

0 回答 0