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!