首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityManager使用Hibernate 4在Seam3中返回NULL

EntityManager使用Hibernate 4在Seam3中返回NULL
EN

Stack Overflow用户
提问于 2012-05-18 09:48:59
回答 2查看 1.1K关注 0票数 1

我需要你的帮助,以正确配置我的网页应用程序使用Seam3上的JBoss7与Hibernate 4。

当我尝试注入EntityManager并使用它时,实体管理器的结果为NULL,但是如果试图通过entitymanager获取EntityManager,则结果是正确的。

这是我的persistence.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

">http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

代码语言:javascript
复制
<persistence-unit name="accbetaPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>accbeta</jta-data-source>
    <properties>               
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />            
        <property name="hibernate.transaction.manager_lookup_class"
            value="org.hibernate.transaction.JBossTransactionManagerLookup" />
        <property name="hibernate.archive.autodetection" value="class" />
    </properties>
</persistence-unit>

这是我的EntityManagerProducer

代码语言:javascript
复制
@ApplicationScoped
public class EntityManagerProducer{

@PersistenceContext
private EntityManager entityManager;

@Produces
public EntityManager getEntityManager() {
    return entityManager;
}
}

这是my /Web/beans.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<interceptors>
 <class>org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor</class>
<class>org.jboss.seam.transaction.TransactionInterceptor</class>
</interceptors>
</beans>

这是我参加EntityManager考试的课程.

代码语言:javascript
复制
@ApplicationScoped
@Named("first")
public class first implements Serializable{

private static final long serialVersionUID = -1625566649081574918L;
private String testBenvenuto;

@Inject 
   private EntityManager entityManager;


public first() {
    this.testBenvenuto = "Welcome";
    starting();

}

public void starting(){
    this.testBenvenuto = this.testBenvenuto+" "+entityManager;
    this.testBenvenuto = this.testBenvenuto+" "+Persistence.createEntityManagerFactory("accbetaPU").createEntityManager().toString();

}

public String getTestBenvenuto() {
    return testBenvenuto;
}

public void setTestBenvenuto(String testBenvenuto) {
    this.testBenvenuto = testBenvenuto;
}
}

当尝试在JBOSS As7中部署(WAR)时,应用程序毫无例外地被部署.

几个小时后..。

我尝试在EntityManagerProducer中使用以下代码:

代码语言:javascript
复制
@ExtensionManaged
    @ConversationScoped
    @Produces
    @PersistenceUnit(unitName="accbetaPU")
    EntityManagerFactory emf;

但是,在部署过程中出现了以下错误:

代码语言:javascript
复制
16:14:03,550 INFO [org.jboss.solder.core.CoreExtension] (MSC service thread 1-1) Preventing class org.jboss.seam.international.locale.LocaleConfiguration from being installed as bean due to @Veto annotation
16:14:05,715 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.weld.exceptions.DefinitionException: WELD-001502 Resource producer field [Resource Producer Field [EntityManagerFactory] with qualifiers [@Any @Default] declared as [[field] @PersistenceUnit @ConversationScoped @Produces startup.first.emf]] must be @Dependent scoped
 at org.jboss.as.weld.services.WeldService.start(WeldService.java:96)
 at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
 at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_25]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_25]
 at java.lang.Thread.run(Thread.java:662) [:1.6.0_25]
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-001502 Resource producer field [Resource Producer Field [EntityManagerFactory] with qualifiers [@Any @Default] declared as [[field] @PersistenceUnit @ConversationScoped @Produces startup.first.emf]] must be @Dependent scoped
 at org.jboss.weld.bean.builtin.ee.EEResourceProducerField.checkEEResource(EEResourceProducerField.java:133)
 at org.jboss.weld.bean.builtin.ee.EEResourceProducerField.initialize(EEResourceProducerField.java:125)
 at org.jboss.weld.bootstrap.AbstractBeanDeployer.deploy(AbstractBeanDeployer.java:119)
 at org.jboss.weld.bootstrap.BeanDeployment.deployBeans(BeanDeployment.java:227)
 at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:378)
 at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:81)
 at org.jboss.as.weld.services.WeldService.start(WeldService.java:89)
 ... 5 more

16:14:05,715 INFO [org.jboss.as.controller] (DeploymentScanner-threads - 2) Service status report
 Services which failed to start:
 service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.weld.exceptions.DefinitionException: WELD-001502 Resource producer field [Resource Producer Field [EntityManagerFactory] with qualifiers [@Any @Default] declared as [[field] @PersistenceUnit @ConversationScoped @Produces startup.first.emf]] must be @Dependent scoped

焊接-001502资源生成器字段[资源生产者字段EntityManagerFactory,限定符@Any @Default声明为[字段@PersistenceUnit @ConversationScoped @Produces startup.first.emf]]必须是“依赖范围”

我该怎么办?少了什么?

下面是war文件中库的列表:

代码语言:javascript
复制
commons-beanutils-1.8.0.jar
commons-digester-2.1.jar
commons-logging-1.1.1.jar
cssparser-0.9.5.jar
guava-0.9.jar
hibernate-entitymanager-4.0.0.CR1.jar
jboss-servlet-api_3.0_spec-1.0.0.Final.jar
joda-time-1.6.jar
log4j-1.2.16.jar
ocpsoft-pretty-time-1.0.6.jar
picketlink-idm-api-1.5.0.Alpha02.jar
picketlink-idm-common-1.5.0.Alpha02.jar
picketlink-idm-core-1.5.0.Alpha02.jar
picketlink-idm-spi-1.5.0.Alpha02.jar
postgresql-9.0-801.jdbc4.jar
prettyfaces-jsf2-3.2.0.jar
richfaces-components-api-4.2.1.Final.jar
richfaces-components-ui-4.2.1.Final.jar
richfaces-core-api-4.2.1.Final.jar
richfaces-core-impl-4.2.1.Final.jar
sac-1.3.jar
seam-faces-3.1.0.Final.jar
seam-faces-api-3.1.0.Final.jar
seam-international-3.1.0.Final.jar
seam-international-api-3.1.0.Final.jar
seam-persistence-3.1.0.Final.jar
seam-persistence-api-3.1.0.Final.jar
seam-security-3.1.0.Final.jar
seam-security-api-3.1.0.Final.jar
slf4j-api-1.6.1.jar
slf4j-simple-1.6.1.jar
solder-api-3.1.0.Final.jar
solder-impl-3.1.0.Final.jar
solder-logging-3.1.0.Final.jar

Jboss版本为7.0.2

请帮帮我

谢谢你的回答..。我试图删除hibernate-entitymanager-4.0.0.CR1.jarjboss-servlet-api_3.0_spec-1.0.0.Final.jar,但没有效果!

我也改变了persistence.xml

代码语言:javascript
复制
<persistence-unit name="accbetaPU">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/AccbetaDS</jta-data-source>
        <properties>
            <!-- Properties for Hibernate (default provider for JBoss AS) -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.show_sql" value="true"/>
            <!-- Only format when you need to debug, because it slows things down -->
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.transaction.manager_lookup_class"
                value="org.hibernate.transaction.JBossTransactionManagerLookup" />
        </properties>
    </persistence-unit>

当我试图用这种方式创建实体管理器时.

代码语言:javascript
复制
@ExtensionManaged
    @ConversationScoped
    @Produces
    @PersistenceUnit(unitName="accbetaPU")
    EntityManagerFactory emf;

错误是一样的..。

代码语言:javascript
复制
17:11:20,589 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.weld.exceptions.DefinitionException: WELD-001502 Resource producer field [Resource Producer Field [EntityManagerFactory] with qualifiers [@Any @Default] declared as [[field] @ConversationScoped @PersistenceUnit @Produces startup.first.emf]] must be @Dependent scoped
 at org.jboss.as.weld.services.WeldService.start(WeldService.java:96)
 at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
 at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_25]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_25]
 at java.lang.Thread.run(Thread.java:662) [:1.6.0_25]
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-001502 Resource producer field [Resource Producer Field [EntityManagerFactory] with qualifiers [@Any @Default] declared as [[field] @ConversationScoped @PersistenceUnit @Produces startup.first.emf]] must be @Dependent scoped
 at org.jboss.weld.bean.builtin.ee.EEResourceProducerField.checkEEResource(EEResourceProducerField.java:133)
 at org.jboss.weld.bean.builtin.ee.EEResourceProducerField.initialize(EEResourceProducerField.java:125)
 at org.jboss.weld.bootstrap.AbstractBeanDeployer.deploy(AbstractBeanDeployer.java:119)
 at org.jboss.weld.bootstrap.BeanDeployment.deployBeans(BeanDeployment.java:227)
 at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:378)
 at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:81)
 at org.jboss.as.weld.services.WeldService.start(WeldService.java:89)
 ... 5 more

17:11:20,605 INFO [org.jboss.as.controller] (DeploymentScanner-threads - 2) Service status report
 Services which failed to start:
 service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."accbeta.war".WeldService: org.jboss.weld.exceptions.DefinitionException: WELD-001502 Resource producer field [Resource Producer Field [EntityManagerFactory] with qualifiers [@Any @Default] declared as [[field] @ConversationScoped @PersistenceUnit @Produces startup.first.emf]] must be @Dependent scoped

谢谢你的回答..。我试图删除hibernate-entitymanager-4.0.0.CR1.jarjboss-servlet-api_3.0_spec-1.0.0.Final.jar,但没有效果!

我也改变了persistence.xml

代码语言:javascript
复制
<persistence-unit name="accbetaPU">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/AccbetaDS</jta-data-source>
        <properties>
            <!-- Properties for Hibernate (default provider for JBoss AS) -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.show_sql" value="true"/>
            <!-- Only format when you need to debug, because it slows things down -->
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.transaction.manager_lookup_class"
                value="org.hibernate.transaction.JBossTransactionManagerLookup" />
        </properties>
    </persistence-unit>

当我尝试创建实体管理器时,错误是相同的.

EN

回答 2

Stack Overflow用户

发布于 2012-05-18 16:54:38

首先,我将删除hibernate-entitymanager-4.0.0.CR1.jarjboss-servlet-api_3.0_spec-1.0.0.Final.jar。不确定这是问题所在,但这些并不一定需要。

另外,<jta-data-source>accbeta</jta-data-source>不应该像<jta-data-source>java:jboss/datasources/accbeta</jta-data-source>那样吗?诚然,我还没有在AS 7中充分使用JPA,但我知道大多数示例如下所示:-)

票数 0
EN

Stack Overflow用户

发布于 2013-02-18 22:51:30

我读取了您的堆栈跟踪,检查这个小小的修改是否更改了堆栈跟踪。

在您的EntityManagerFactory中,删除@ConversationScope并添加@依赖注释。

我提到这一点是因为:

代码语言:javascript
复制
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-001502 Resource producer field [Resource Producer Field [EntityManagerFactory] with qualifiers [@Any @Default] declared as [[field] @PersistenceUnit @ConversationScoped @Produces startup.first.emf]] must be @Dependent scoped
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10650342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档