Padrão de desenvolvimento usando Seam

0 respostas
rafael.espiritosanto

Caros colegas,
tenho uma dúvida na forma como desenvolver as funcionalidades de um projeto usando o Seam.
Não entendi e não gostei muito de utilizar a classe EntityHome passando a Entity como parâmetro.

Estou procurando desenvolver utilizando Stateful Session Bean utilizando as notações @In e @Out para controlar meus objetos.

Considerando a seguinte Entity

package br.ufrj.cos.portalfees.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;

@Entity
@Name("revisaoSistematica")
public class RevisaoSistematica implements Serializable {
	
		/**
	 * 
	 */
	private static final long serialVersionUID = 4757600483707115650L;
		private Long id;
		private PICO pico;
		private GrupoPesquisa grupoPesquisa;
		private List<MaquinaBusca> maquinaBuscaList;
		private String questao;
		
		@Id @GeneratedValue
		public Long getId() {
			return id;
		}
		public void setId(Long id) {
			this.id = id;
		}
		
		@OneToOne(fetch=FetchType.LAZY)
		public PICO getPico() {
			return pico;
		}
		public void setPico(PICO pico) {
			this.pico = pico;
		}
		
		@OneToOne(fetch=FetchType.LAZY)
		public GrupoPesquisa getGrupoPesquisa() {
			return grupoPesquisa;
		}
		public void setGrupoPesquisa(GrupoPesquisa grupoPesquisa) {
			this.grupoPesquisa = grupoPesquisa;
		}
		
		@OneToMany
		public List<MaquinaBusca> getMaquinaBuscaList() {
			return maquinaBuscaList;
		}
		public void setMaquinaBuscaList(List<MaquinaBusca> maquinaBuscaList) {
			this.maquinaBuscaList = maquinaBuscaList;
		}
		
		@NotNull
		public String getQuestao() {
			return questao;
		}
		public void setQuestao(String questao) {
			this.questao = questao;
		}
}

e o objeto PICO

package br.ufrj.cos.portalfees.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;

@Entity
@Name("pico")
public class PICO implements Serializable {
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 655415169856014L;
	private Long id;
	private String problem;
	private String intervention;
	private String control;
	private String outcome;
	
	@Id @GeneratedValue
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	
	@NotNull
	public String getProblem() {
		return problem;
	}
	public void setProblem(String problem) {
		this.problem = problem;
	}
	
	@NotNull
	public String getIntervention() {
		return intervention;
	}
	public void setIntervention(String intervention) {
		this.intervention = intervention;
	}
	
	@NotNull
	public String getControl() {
		return control;
	}
	public void setControl(String control) {
		this.control = control;
	}
	
	@NotNull
	public String getOutcome() {
		return outcome;
	}
	public void setOutcome(String outcome) {
		this.outcome = outcome;
	}
}

ao criar a página correspondente tive a dúvida se fazia referência ao objeto PICO a partir do objeto RevisaoSistematica ou se utilizaria o objeto como um componente separado e fizesse o relacionamento
dentro do método do sessionBean.

Ao tentar a primeira abordagem obtive o seguinte erro

Exception during request processing:
Caused by javax.servlet.ServletException with message: "/revisaoSistematica/formularQuestao.xhtml @27,91 value="#{revisaoSistematica.pico.problem}": Target Unreachable, 'pico' returned null on 'br.ufrj.cos.portalfees.entity.RevisaoSistematica'"
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:619)

Se o “melhor jeito” for este mesmo, como resolver este problema.

Segue o código do session bean

package br.ufrj.cos.portalfees.session.revisaoSistematica;

import javax.ejb.Remove;
import javax.ejb.Stateful;

import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.log.Log;

import br.ufrj.cos.portalfees.entity.RevisaoSistematica;

@Stateful
@Name("executarRevisaoSistematicaAction")
public class ExecutarRevisaoSistematicaActionBean implements ExecutarRevisaoSistematicaAction {
	
	@Logger
	private Log log;
	
	@In(create=true)
	RevisaoSistematica revisaoSistematica;
	
	@In
	StatusMessages statusMessages;
	
	@Override
	@Begin(join=true)
	public String formularQuestao() {
		log.debug("metodo chamdo com os valores: " + revisaoSistematica.getQuestao());
		return null;
	}

	public String finalizarExecucao() {
		return null;
	}
	
	@Override
	@Remove
	@Destroy
	public void remove() {}
}

Abraços!

Criado 11 de janeiro de 2009
Respostas 0
Participantes 1