私は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を作成しますか?)
jndi-name = "persistence/** testcontext **"ではなく@PersistenceContext(unitName = "** textcontext **")。そこに使用されている間違った名前になる可能性があります。 – StanislavL
申し訳ありませんが、質問の入力ミスです。 UserDaoクラスのスニペットを見ると、すべてがtestcontextであることがわかります – user1884155
persistence.xmlファイルをインクルードできますか? –