2014-05-17 57 views
2

因爲我是使用Java EE 7的新手,所以我創建了一個專門用於學習目的的項目。 我創建了一個CDI豆與請求範圍如下(它只是實現Serializable接口,因爲我一直在使用它試圖與@ javax.faces.view.ViewScoped)@PostConstruct第一次執行失敗

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; 
    } 
} 

的事情是:我開始WildFly(又名JBoss AS 8),我的應用程序正常啓動。然後我打開瀏覽器並嘗試訪問應用程序的URL。在第一次訪問,我得到這個異常:

Stack Trace 
javax.servlet.ServletException: WELD-000049: Unable to invoke private void com.issuemanager.web.bean.CreateIssueBean.init() on [email protected] 

以上是顯示在瀏覽器,下面是顯示上的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 

因此,大家可以看到它有調用問題@PostConstruct方法。只是讓你知道

IssueRepositoryFacade 

是一個EJB。但是,當我刷新相同的URL時,它的工作正常。我不知道發生了什麼。這個EJB註解爲

@TransactionAttribute(TransactionAttributeType.REQUIRED) 

所以我使用容器管理的事務。我使用MySql數據庫的JPA 2.1。 有人,如果不給我一個解決方案,至少可以解釋爲什麼會發生這種情況?

謝謝。

+1

爲什麼你認爲PostConstruct存在問題?我看到一個事務錯誤,可能是一些持久性配置問題。 – skegg99

+0

這應該對你有幫助:http://thejavablog.wordpress.com/2010/04/05/transaction-is-not-active-txtransactionimple-ac-basicaction/ – pL4Gu33

回答

0

修復了在Wildfly數據源中禁用JTA並在persistence.xml中使用RESOURCE-LOCAL事務的問題。

0

默認情況下CDI Bean沒有事務功能。在JTA 1.2中,EE 7的一部分,添加了一個事務攔截器,允許將CDI bean標記爲事務性的。您可能想嘗試將PostConstruct方法標記爲@Transactional(TxType.REQUIRED)