[jboss-user] [JBoss Seam] - check if entity is change

szaccaria do-not-reply at jboss.com
Wed Aug 1 06:27:30 EDT 2007


Hi to all,
It is possible to know if a entity it is changed after submit a form and first the entityManager flush this change in db? I make this kind of question because I need to controll if a entity be changed from the user, so I can sign a flag.

Morover I have the follow SFSB


  | @Stateful
  | @Scope(ScopeType.CONVERSATION)
  | @Name("gestione")
  | public class Gestione implements GestioneI {
  | 
  | 	@PersistenceContext(type = PersistenceContextType.EXTENDED)
  | 	EntityManager entityManager;
  | 
  | 	@Out(scope = ScopeType.CONVERSATION, required = false)
  | 	Documento doc;
  | 
  | 	@In(required = false)
  | 	Long idDocumento;
  | 
  | 	@In(required = false)
  | 	TaskInstance taskInstance;
  | 
  | 	@In
  | 	private Actor actor;
  | 
  | 	@Logger
  | 	private Log log;
  | 
  | 	@DataModel
  | 	private List<TaskInstance> taskInstacesResponsabile;
  | 	
  | 	@DataModelSelection
  | 	private TaskInstance task;
  | 	
  | 	private String tab;
  | 
  | 	@StartTask(flushMode=FlushModeType.MANUAL)
  | 	public String iniziaValutazioneDoc(String tab) {
  | 
  | 		String out = continuaValutazioneDoc(tab);
  | 		
  | 		return out;
  | 	}
  | 
  | 	@BeginTask(flushMode=FlushModeType.MANUAL)
  | 	public String continuaValutazioneDoc(String tab) {
  | 		
  | 		this.tab = tab;
  | 		
  | 		doc = (Documento) entityManager.createQuery("select distinct d from Documento d where d.id = :id").setParameter("id", idDocumento).getSingleResult();
  | 		
  | 		return "/documento.xhtml";
  | 
  | 	}
  | 
  | 	@BeginTask
  | 	@EndTask(transition = "confermato")
  | 	public String chiudiValutazioneDoc(String tab) {
  | 
  | 		if (taskInstance.getStart() == null)
  | 			taskInstance.start();
  | 
  | 		this.tab = tab;
  | 
  | 		return "/todo2.xhtml";
  | 	}
  | 
  | 	@EndTask(transition = "confermato")
  | 	public String confermaAInterno(String tab) {
  | 
  | 		taskInstance.setActorId((String)taskInstance.getVariable("responsabile"));
  | 		
  | 		taskInstance.setVariable(getTrackVariableNameForActor(actor), actor.getId());		
  | 		
  | 		
  | 		this.tab = tab;
  | 
  | 		return "/todo.xhtml";
  | 	}
  | 	
  | 	@End
  | 	public String sospendiValutazioneDoc(String tab) {
  | 				
  | 		this.tab = tab;
  | 		return "/todo2.xhtml";
  | 
  | 	}
  | 
  | 	
  | 
  | 	
  | 	
  | 	@Destroy
  | 	@Remove
  | 	public void destroy() {
  | 	}
  | 
  | 	
  | 	
  | 	public void caricaTasksInCarico() {
  | 		
  | 		JbpmContext context = ManagedJbpmContext.instance();
  | 			
  | 		taskInstacesResponsabile = context.getSession().createQuery(
  | 		"select ti "+	
  | 		"from org.jbpm.taskmgmt.exe.TaskInstance ti, "+
  | 		"     org.jbpm.context.exe.VariableInstance vi join vi.processInstance pi " +
  | 		"where " +
  | 		"	 pi.end = null and " +
  | 		"	 ti.token.processInstance = pi and " +
  | 		"	 vi.name = :track and " +
  | 		"	 vi.value = :trackValue and " +
  | 		"    ( ti.actorId = null or ti.actorId != :actorId ) and " +
  | 		"	 ti.isOpen = true" ).setString("track", getTrackVariableNameForActor(actor)).setString("trackValue",actor.getId()).setString("actorId", actor.getId()).list();
  | 		
  | 				
  | 		for (Iterator iter = taskInstacesResponsabile.iterator(); iter.hasNext();) {
  | 			TaskInstance element = (TaskInstance) iter.next();
  | 			log.error("TaskInstance n° #0 di #1", element.getId(), element.getActorId());
  | 		}
  | 		
  | 	}
  | 
  | 	/**
  | 	 * Genero il documento pdf in memoria
  | 	 */
  | 	public String stampaDocumento() {
  | 
  | 		FacesContext faces = FacesContext.getCurrentInstance();
  | 
  | 		ByteArrayOutputStream bAOS = PdfUtility.stampaPDF(doc);
  | 
  | 		HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().getResponse();
  | 		response.setContentType("application/pdf");
  | 		response.setContentLength(bAOS.size());
  | 		response.setHeader("Content-disposition", "Attachment; filename=\"" + doc.getClifor() + "_" + doc.getNumdoc() + ".pdf" + "\"");
  | 		try {
  | 			ServletOutputStream out;
  | 			out = response.getOutputStream();
  | 			out.write(bAOS.toByteArray());
  | 		} catch (IOException e) {
  | 			e.printStackTrace();
  | 		}
  | 		faces.responseComplete();
  | 
  | 		return null;
  | 
  | 	}
  | 	
  | 
  | 	public String consultazioneDocumento( String tab) {			
  | 		
  | 		doc = (Documento) entityManager.createQuery("select distinct d from Documento d where d.id = :id").setParameter("id",  task.getVariable("idDocumento"))
  | 				.getSingleResult();
  | 
  | 		this.tab = tab;		
  | 		return "/documento.xhtml";
  | 		
  | 	}
  | 	
  | 	
  | 
  | 	public String salvaDocumento() {
  | 
  | 		entityManager.persist(doc);
  | 
  | 		return null;
  | 	}
  | 
  | 	public TaskInstance getTaskInstance() {
  | 		return taskInstance;
  | 	}
  | 
  | 	public void setTaskInstance(TaskInstance taskInstance) {
  | 		this.taskInstance = taskInstance;
  | 	}
  | 	
  | 	/**
  | 	 * Mi torna il nome della variabile track per l'utente actor
  | 	 */
  | 	private String getTrackVariableNameForActor(Actor actor) {
  | 
  | 		String sActor = actor.getId();
  | 		StringBuffer trackBuff = new StringBuffer();
  | 		trackBuff.append("trackFor");
  | 		if (sActor != null && sActor.trim().length() > 1) {
  | 			trackBuff.append(sActor.substring(0, 1).toUpperCase());
  | 			trackBuff.append(sActor.substring(1));
  | 		}
  | 		return trackBuff.toString();
  | 
  | 	}
  | 
  | 	
  | }
  | 
  | 

when I call from a xhtml page the action: gestione.stampaDocumento
like:


  | <h:form>
  | <h:commandButton
  |         action="#{gestione.stampaDocumento}"
  | 	value="#{messages.generapdf}"
  | 	style="border: none;"
  | 	image="/img/pdf.png"
  | 	title="#{messages.generapdf}"
  | 	rendered="#{s:hasRole('controllo')}">
  | </h:commandButton>
  | </h:form>
  | 

The possible change that user made to the endity are flush in to the db, although i don't end the conversation, ( flushMode=FlushModeType.MANUAL is set in al @starttask )

Thanks !!!

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4069563#4069563

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4069563




More information about the jboss-user mailing list