[seam-issues] [JBoss JIRA] (JBSEAM-3468) Using TransactionManagementType.BEAN sometimes gives javax.persistence.TransactionRequiredException depending on the components on the xhtml page
SBS JIRA Integration (JIRA)
jira-events at lists.jboss.org
Sat Dec 15 06:00:10 EST 2012
[ https://issues.jboss.org/browse/JBSEAM-3468?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
SBS JIRA Integration updated JBSEAM-3468:
-----------------------------------------
Forum Reference: https://community.jboss.org/message/783547#783547
> Using TransactionManagementType.BEAN sometimes gives javax.persistence.TransactionRequiredException depending on the components on the xhtml page
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: JBSEAM-3468
> URL: https://issues.jboss.org/browse/JBSEAM-3468
> Project: Seam 2
> 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, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the seam-issues
mailing list