[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