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();
}
}
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:
<?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>
[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>