2017-01-13 12 views
0

私はJava 8/spring 4.3.5.RELEASE Webアプリケーションを持っています。これはwildfly 10サーバー上で動作します。私はpersistence.xmlファイルを使用します。私は、JBoss JPAにログイントレースし、授業を休止有効にして私は、このファイルをピックアップ取得し、永続ユニットにスムーズに解決されて見ることができます:@PersistenceContextを使用してSpringがEntityManagerを挿入できない

DEBUG [] [org.hibernate.jpa.internal.util.LogHelper] PersistenceUnitInfo [ 
    name: testcontext 
    persistence provider classname: org.hibernate.jpa.HibernatePersistenceProvider 
    classloader: ModuleClassLoader for Module "deployment.BasicWebapp.war:main" from Service Module Loader 
    excludeUnlistedClasses: false 
    JTA datasource: [email protected]fb80232 
    Non JTA datasource: null 
    Transaction type: JTA 
    PU root URL: vfs:/C:/Users/Me/Wildfly 10.0.0/standalone/deployments/BasicWebapp.war/WEB-INF/classes/ 
    Shared Cache Mode: UNSPECIFIED 
    Validation Mode: AUTO 
    Jar files URLs [] 
    Managed classes names [ 
     com.company.project.data.User] 
    Mapping files names [] 
    Properties [ 
     jboss.entity.manager.jndi.name: persistence/testcontext] 

私は今、スプリングによって注入されたエンティティマネージャを持っているDAOクラスをしたいです:

UserDao.class

@Repository 
public class UserDao 
{ 
    @PersistenceContext(unitName = "testcontext") 
    private EntityManager entityManager; 
} 

私は@Repositoryと@PersistenceContext注釈の両方が自分のアプリケーションを起動時に処理されますように、コンポーネントをスキャンし、注釈の設定があります。

春-servlet.xml

<context:component-scan base-package="com.company.project" /> 
<context:annotation-config/> 

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/testcontext"/> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"/> 

<tx:annotation-driven/> 

注入は、2つの可能な方法で、しかし失敗:

私は@PersistenceContext(unitName = "testcontext")を使用している場合は、エラーは次のとおりです。 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'testcontext' available

私が使用している場合@PersistenceContextの場合、エラーは次のようになります。

Caused by: java.lang.NullPointerException 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:580) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:546) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:707) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:680) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:354) 
    ... 44 more 

私はspringコンフィグレーションで、@PersistenceContext注釈を処理してspring-servlet.xmlで宣言したentityManagerFactory Beanを参照するか、コンテナの永続性ユニットを直接使用するように指示しています。それを達成するために何を追加する必要がありますか?

また、私はtransactionmanagerの部分で少しスケッチしています。 wildflyはtransactionmanagerを提供しているのですか?もしそうなら、私はSpringでBeanを作成する必要がありますか(それはjbossによって作成されたBeanを作成するか、独自のBeanを作成しますか?)

+0

jndi-name = "persistence/** testcontext **"ではなく@PersistenceContext(unitName = "** textcontext **")。そこに使用されている間違った名前になる可能性があります。 – StanislavL

+0

申し訳ありませんが、質問の入力ミスです。 UserDaoクラスのスニペットを見ると、すべてがtestcontextであることがわかります – user1884155

+0

persistence.xmlファイルをインクルードできますか? –

答えて

関連する問題