[jbossseam-issues] [JBoss JIRA] Created: (JBSEAM-3468) Using TransactionManagementType.BEAN sometimes gives javax.persistence.TransactionRequiredException depending on the components on the xhtml page

Susanne Jarl (JIRA) jira-events at lists.jboss.org
Sun Sep 28 19:52:20 EDT 2008


Using TransactionManagementType.BEAN sometimes gives javax.persistence.TransactionRequiredException depending on the components on the xhtml page
-------------------------------------------------------------------------------------------------------------------------------------------------

                 Key: JBSEAM-3468
                 URL: https://jira.jboss.org/jira/browse/JBSEAM-3468
             Project: Seam
          Issue Type: Bug
          Components: EJB3
    Affects Versions: 2.0.2.SP1
         Environment: Windows XP, JBoss AS 4.2.2
            Reporter: Susanne Jarl


I have a SLSB:

@Name("statService")
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class StatServiceBean implements StatServiceLocal {

	@In
	EntityManager entityManager;
	
	@Resource
	SessionContext ejbContext;

public void generateStat() {

Query query = entityManager.createNativeQuery(
					"INSERT INTO x"
							+ "SELECT y, :currentDate, count(distinct(ip)) AS number "
							+ "FROM z"
							+ "WHERE datetime BETWEEN :currentDate AND :currentDatePlusOne "
							+ "GROUP BY (x1) " + "ORDER BY number desc ").setParameter(
					"currentDate", calCurrent.getTime()).setParameter("currentDatePlusOne",
					calCurrentPlusOneDay.getTime());	
			
			// Save to database. Create manual transaction since the built in only works for 5 minutes.
			UserTransaction transaction = ejbContext.getUserTransaction();	
			try {
				transaction.begin();
				query.executeUpdate();
				transaction.commit();
			}
			catch (Exception e) {
				try {
					log.error("Transaction failed when updating stat. Try rolling back.", e);
					transaction.rollback();					
				}
				catch (Exception exp) {
					log.error("Transaction failed roling back.", exp);
				}				
			}
}

I have a xhtml page with components calling the generateStat method and depending of what components are on it this code  works or it gives me a TransactionRequiredException.

This does not work:

<s:link action="#{statService.generateStat}" value="Update stat" />	

This does not work "alone":
<h:form><h:commandButton action="#{statService.generateStat}" value="Uppdatera sidvisningsstatistik" /></h:form>

but if you add for example:
<f:subview id="subcriberView" rendered="#{userAdmin.subscriber != null}">			
</f:subview>

so you have both the form with the button and this subview component that calls userAdmin which is a stateful session bean and "subscriber" is just a property, then it works! The sql insert statement is run and the database gets updated and I don't get any exceptions.

So I guess this must be a bug!

It seems like you need a call to some SFSB in the same request in order to get the manual userTransaction begin and commit to work. But in the case with <s:link> then it does not  help to add the f:subview code so I don't know...

In my components.xml I have this code:

<transaction:ejb-transaction />
 
but if I remove it, there is no difference.


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list