2016-11-24 20 views
0

標準のスプリングプロジェクトP1をWebプロジェクトP2にインポートしようとしています.P2にP1のWebアスペクトを実装しています。 P2のP1のすべてのリソースをP1.jarとしてインポートしました <import-resource>を使用してアプリケーションコンテキストファイルを明示的にインポートしました。 しかし、JpaRepositoriesはP2でオートワイヤードにはなりません。それはP2の文脈にあるようには見えない。JPAを使用したSpring MVC:jarファイルからJpaRepositoryをインスタンス化できません。

誰も私がここで不足しているかもしれないと示唆することができます。

UPDATE:25Nov2016

P1-applicationContext.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:context="http://www.springframework.org/schema/context" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:repository="http://www.springframework.org/schema/data/repository" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 
     http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 
     http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.11.xsd"> 

<tx:annotation-driven proxy-target-class="true"/> 
<context:component-scan base-package="com.home.p1.blog" /> 
    <jpa:repositories base-package="com.home.p1.blog.repo" /> 


    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" /> 
     <property name="url" 
      value="jdbc:derby://localhost:1527/MyDerby" /> 
     <property name="username" value="root" /> 
     <property name="password" value="root" /> 
    </bean> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="WorkUp" /> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="packagesToScan" value="com.home.p1.blog"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="databasePlatform" value="org.hibernate.dialect.DerbyDialect" /> 
      </bean> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.use_sql_comments">false</prop> 
      </props> 
     </property> 

    </bean> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

    <bean id="authorDAO" class="com.home.p1.blog.repo.AuthorDAO"> 

    </bean> 
    <bean id="authorService" class="com.home.p1.blog.service.AuthorServiceImpl"></bean> 

    <bean id="blogService" class="com.home.p1.blog.service.BlogServiceImpl"></bean> 

</beans> 

P2-applicationContext.xmlを(その実際の名前:RestControllerスキャンパッケージを保持するために、残り-servlet.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:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:repository="http://www.springframework.org/schema/data/repository" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 
     http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 
     http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.11.xsd"> 
    <import resource="classpath:com.home.p1.blog.src/src/main/resources/P1-ApplicationContext.xml"/> <!-- this loads find --> 
     <context:component-scan base-package="com.home.p2.blog.controller" /> <!-- this will load the RestController --> 
    <!-- <context:component-scan base-package="com.home.**" /> --> 
    <!-- THIS GIVES SOME WIERD ERROR <jpa:repositories base-package="com.home.*" /> --> 
    <mvc:annotation-driven/> 


<!-- <bean id="blogService" class="com.oracle.blog.service.BlogServiceImpl"></bean> --> 
</beans> 

更新日:28Nov2016 オンP2のアプリケーションコンテキストで<jpa:repositories base-package>を設定すると、私が以前に取得していたwierdエラーが表示されなくなりました。 また、Spring Beanサポートでxml configのインポートが正常に行われるようにするには、他のすべてが適切な場所に落ちています。 P1で参照されたJpaRepositoriesのみがP2のコンテキストに反映されません。

+0

コンポーネントスキャンが正しく設定されていますか? – developer

+0

あなたの設定を投稿することができます – kuhajeyan

+0

私は設定を更新しました。 –

答えて

0

あなたがしようとしていることは考えられません。あなたはp2でリポジトリスキャンを有効にし、そのスキャンでパッケージに言及する必要があります。

あなたp1.jarは

<jpa:repositories base-package="com.home.p1.blog.repo" /> 
+0

情報ありがとうございます。 P1.jarがP2のクラスパスにある場合、P1のBean(authorDAO)の1つを正常に取得できることを理解するのに役立ちますか? 'jpa:repositories'の' base-package'プロパティにワイルドカードを指定すると 'jpa:repositories'がクラスパスjarでスキャンされるように機能的に制限されていますか? '' –

+0

いいえ、あなたの現在のコンテキストにアクセス可能なすべてのパッケージをベースパッケージで指定することができます。したがって、プロジェクトp2のパッケージとp1のようなクラスパスjarのパッケージはスキャン対象となります。パッケージについて言及するだけです。 – ScanQR

0

が解決あなただけのP2では、リポジトリのスキャンを有効にする必要があり、その後P2のクラスパスにある場合:私たちは、P2にP1.jarからJpaRepositoriesをインポートすることに注意してください。 P2のconfig xmlに<jpa:repositories>というタグはありません。 P1のconfig.xmlを適切にインポートしていることを確認してください。 Eclipseユーザーは、Spring Beans SupportタブでXml/Java設定を追加するだけでなく、インポート要素のサポートを有効にする必要があります。 enter image description here

関連する問題