[ IgorMedo @ 12.01.2009. 10:29 ] @
Imam jedan problem vezan za rad sa transakcijama. Koristim JPA i Hibernate kao provajdera. I ako sam postavio da je FlushModeType.MANUAL, upis u bazu se vrsi automatski a ne kada pozovem entityManager.flush. Imam jednu JSF stranu na kojoj unosim podatke. Kada pritisnem taster pokrenem metodu addRole(), i odmah se podaci upisu u bazu. Conversation iz kojeg pozivam ovu klasu je takodje ima podesen FlushModeType.MANUAL Evo kod klase: Code: package de.codecentric.hr.controller; import javax.persistence.EntityManager; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.FlushModeType; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import de.codecentric.hr.model.Roles; @Name("rolesController") @Scope(ScopeType.CONVERSATION) public class RolesController { @In private EntityManager entityManager; @Create public void create(){ } @Begin(join=true,flushMode=FlushModeType.MANUAL) public boolean addRoles (Roles roles){ try{ entityManager.persist(roles); return true; } catch (Exception ex) { return false; } } public Roles findRoles(int pk) { try { return entityManager.find(Roles.class, pk); } catch (Exception ex) { return null; } } public boolean removeRoles(int pk) { try { Roles roles = entityManager.find(Roles.class, pk); entityManager.remove(roles); return true; } catch (Exception ex) { return false; } } public void comit(){ entityManager.flush(); } } Evo moje component.xml datoteke: Code: [code][code]<?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:persistence="http://jboss.com/products/seam/persistence" xmlns:security="http://jboss.com/products/seam/security" xmlns:transaction="http://jboss.com/products/seam/transaction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rich="http://richfaces.ajax4jsf.org/rich" xmlns:ui="http://java.sun.com/jsf/facelets" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.1.xsd http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.1.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.1.xsd http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.1.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.1.xsd"> <core:init jndi-pattern="cc-hr/#{ejbName}/local" debug="true"/> <core:manager conversation-timeout="120000" default-flush-mode="MANUAL" concurrent-request-timeout="500" conversation-id-parameter="cid"/> <persistence:entity-manager-factory name="entityManagerFactory" persistence-unit-name="hrDatabase" /> <persistence:managed-persistence-context name="entityManager" auto-create="true" entity-manager-factory="#{entityManagerFactory}" /> <transaction:ejb-transaction /> <component name="authenticator" class="de.codecentric.hr.controller.StandardAuthenticatorService" auto-create="true" scope="EVENT" /> <security:identity authenticate-method="#{authenticator.authenticate}" remember-me="true"/> <event type="org.jboss.seam.security.notLoggedIn"> <action execute="#{redirect.captureCurrentView}"/> <action execute="#{identity.tryLogin()}"/> </event> <event type="org.jboss.seam.security.loginSuccessful"> <action execute="#{redirect.returnToCapturedView}"/> </event> </components> |