简体   繁体   English

@PostConstruct首次执行失败

[英]@PostConstruct fail on first execution

Since I'm new using Java EE 7, I've creating a project just for study purpose. 由于我是Java EE 7的新用户,因此我创建了一个仅用于研究目的的项目。 I've created a CDI bean with Request scope as follows (it's just implementing Serializable because I've tried using it with @javax.faces.view.ViewScoped) 我已经创建了一个具有Request作用域的CDI bean,如下所示(它只是实现Serializable,因为我尝试将其与@ javax.faces.view.ViewScoped一起使用)

import com.issuerepository.domain.Issue;
import com.issuerepository.domain.IssueType;
import com.issuerepository.facade.api.IssueRepositoryFacade;

import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.Serializable;
import java.util.List;

@Named
@RequestScoped
public class CreateIssueBean implements Serializable {

    @Inject
    private IssueRepositoryFacade issueRepository;

    private Issue issue;
    private List<IssueType> allIssueType;

    @PostConstruct
    private void init() {
        issue = new Issue();
        allIssueType = issueRepository.findAllIssueType();
    }

    public String saveIssue() {
        issueRepository.saveOrUpdateIssue(issue);
        return "searchIssue.xhtml?faces-redirect=true";
    }

    public Issue getIssue() {
        return issue;
    }

    public void setIssue(Issue issue) {
        this.issue = issue;
    }

    public List<IssueType> getAllIssueType() {
        return allIssueType;
    }

    public void setAllIssueType(List<IssueType> allIssueType) {
        this.allIssueType = allIssueType;
    }
}

The thing is: I start WildFly (Aka JBoss AS 8) and my application starts normally. 问题是:我启动WildFly(又名JBoss AS 8),并且我的应用程序正常启动。 Then I open my browser and try to access the URL of the application. 然后,我打开浏览器并尝试访问应用程序的URL。 In the first access I get this Exception: 在第一次访问中,我得到以下异常:

Stack Trace
javax.servlet.ServletException: WELD-000049: Unable to invoke private void com.issuemanager.web.bean.CreateIssueBean.init() on com.issuemanager.web.bean.CreateIssueBean@5c0dc28a

The above is showed on browser, the below is showed on server.log: 上面显示在浏览器上,下面显示在server.log上:

Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:63) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:162) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:160) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1884) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1861) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:909) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2553) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2539) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2364) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
    ... 177 more
Caused by: java.sql.SQLException: javax.resource.ResourceException: IJ000460: Error checking for a transaction
    at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:154)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228) [hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    ... 198 more
Caused by: javax.resource.ResourceException: IJ000460: Error checking for a transaction
    at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:416)
    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:513)
    at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:146)
    ... 201 more
Caused by: javax.resource.ResourceException: IJ000459: Transaction is not active: tx=TransactionImple < ac, BasicAction: 0:ffffc0a81906:-758bf077:5376ec7d:9 status: ActionStatus.ABORT_ONLY >
    at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:400)
    ... 203 more

So as you can see it has a problem invoking the @PostConstruct method. 如您所见,调用@PostConstruct方法存在问题。 Just so you know 就是这样,你知道

IssueRepositoryFacade

is an EJB. 是一个EJB。 However, when I refresh the same URL it works OK. 但是,当我刷新相同的URL时,它可以正常工作。 I don't know what is happening. 我不知道发生了什么 This EJB is annotated with 该EJB带有注释

@TransactionAttribute(TransactionAttributeType.REQUIRED)

So I'm using container managed transaction. 所以我正在使用容器管理的事务。 I use JPA 2.1 with MySql database. 我将JPA 2.1与MySql数据库一起使用。 Could someone, if not giving me a solution, at least explain why this is happening? 如果没有给我解决方案,有人可以解释一下为什么会这样吗?

Thanks. 谢谢。

CDI Beans by default do not have transaction capabilities. 默认情况下,CDI Bean不具有事务处理功能。 In JTA 1.2, part of EE 7, a transaction interceptor was added that allows CDI beans to be marked as transactional. 在EE 7的JTA 1.2中,添加了一个事务拦截器,该拦截器允许将CDI bean标记为事务性的。 You may want to try marking your PostConstruct method as @Transactional(TxType.REQUIRED) 您可能想要尝试将PostConstruct方法标记为@Transactional(TxType.REQUIRED)

修复了在Wildfly数据源中禁用JTA并在persistence.xml中使用RESOURCE-LOCAL事务的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM