[jboss-user] [JBoss Seam] - Architecture Problem (validation)

Eethyo do-not-reply at jboss.com
Mon Nov 5 10:26:04 EST 2007


Hi,
I have a problem with the Validation.

Validator:
package com.ccm30.validators;
  | 
  | import java.util.List;
  | 
  | import javax.persistence.NoResultException;
  | 
  | import org.hibernate.mapping.Property;
  | import org.hibernate.validator.PropertyConstraint;
  | import org.hibernate.validator.Validator;
  | import org.jboss.seam.Component;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.framework.EntityController;
  | 
  | import com.ccms30.entities.CcmsProductline;
  | import com.ccms30.entities.CcmsProductlineController;
  | 
  | @Name("myProductlineListValidator")
  | public class MyProductlineListValidator extends EntityController implements
  | 		Validator<MyProductlineList>, PropertyConstraint  {
  | 
  | 
  | 	
  | 	// part of the Validator<Annotation> contract,
  | 	// allows to get and use the annotation values
  | 	public void initialize(MyProductlineList parameters) {
  | 
  | 	}
  | 
  | 	// part of the property constraint contract
  | 	public boolean isValid(Object value) {
  | 		
  | 		if (value == null){
  | 			System.out.println("Value is null");
  | 			return true;
  | 		}
  | 			
  | 		if (!(value instanceof String))
  | 		{
  | 			System.out.println("Value is not a string");
  | 			return false;
  | 		}
  | 			
  | 		String string = (String) value;
  | 		String trimmed = string.trim();
  | 		
  | 		try{
  | 			CcmsProductline cpl = (CcmsProductline) createQuery(
  | 			"select cpl from CcmsProductline cpl where cpl.name=:name")
  | 			.setParameter("name", trimmed).getSingleResult();
  | 
  | 			System.out.println("Value is in List");
  | 			return true;
  | 		}catch(NoResultException e)
  | 		{
  | 			System.out.println("Value is not in List");
  | 			return false;
  | 		}
  | 
  | 	}
  | 
  | 	public void apply(Property arg0) {
  | 
  | 	}
  | 
  | }
  | 

Entity:
package com.ccms30.entities;
  | // Generated 16.10.2007 13:32:22 by Hibernate Tools 3.2.0.b9
  | 
  | import java.util.Date;
  | import java.util.HashMap;
  | import java.util.HashSet;
  | import java.util.Set;
  | 
  | import javax.persistence.CascadeType;
  | import javax.persistence.Column;
  | import javax.persistence.Entity;
  | import javax.persistence.FetchType;
  | import javax.persistence.GeneratedValue;
  | import javax.persistence.GenerationType;
  | import javax.persistence.Id;
  | import javax.persistence.JoinColumn;
  | import javax.persistence.JoinTable;
  | import javax.persistence.ManyToMany;
  | import javax.persistence.ManyToOne;
  | import javax.persistence.OneToMany;
  | import javax.persistence.SequenceGenerator;
  | import javax.persistence.Table;
  | import javax.persistence.Temporal;
  | import javax.persistence.TemporalType;
  | import javax.persistence.Transient;
  | 
  | import org.hibernate.validator.Length;
  | import org.hibernate.validator.NotNull;
  | import org.richfaces.model.TreeNode;
  | 
  | import com.ccm30.validators.MyProductlineList;
  | import com.ccms30.treenodes.CcmsTree;
  | /**
  |  * CcmsProductline generated by hbm2java
  |  */
  | @Entity
  | @Table(name = "CCMS_PRODUCTLINE", schema = "CCMSDB")
  | public class CcmsProductline extends CcmsTree implements java.io.Serializable {
  | 
  | 	private static final long serialVersionUID = 1L;
  | 	
  | 	private Integer id;
  | 	private CcmsProductline ccmsProductline;
  | 	private CcmsUser ccmsUser;
  | 	private String name;
  | 	private String description;
  | 	private Date modified;
  | 	private Set<CcmsProductline> ccmsProductlines = new HashSet<CcmsProductline>(
  | 			0);
  | 	private Set<CcmsProduct> ccmsProducts = new HashSet<CcmsProduct>(0);
  | 	private Set<CcmsPolicy> ccmsPolicies = new HashSet<CcmsPolicy>(0);
  | 	
  | 	@Transient
  | 	private String ccmsParentProductlineName = initCcmsParentProductlineName();
  | 
  | 	public CcmsProductline() {
  | 	}
  | 
  | 	public CcmsProductline(Integer id, String name) {
  | 		this.id = id;
  | 		this.name = name;
  | 	}
  | 	public CcmsProductline(Integer id, CcmsProductline ccmsProductline,
  | 			CcmsUser ccmsUser, String name, String description, Date modified,
  | 			Set<CcmsProductline> ccmsProductlines,
  | 			Set<CcmsProduct> ccmsProducts, Set<CcmsPolicy> ccmsPolicies) {
  | 		this.id = id;
  | 		this.ccmsProductline = ccmsProductline;
  | 		this.ccmsUser = ccmsUser;
  | 		this.name = name;
  | 		this.description = description;
  | 		this.modified = modified;
  | 		this.ccmsProductlines = ccmsProductlines;
  | 		this.ccmsProducts = ccmsProducts;
  | 		this.ccmsPolicies = ccmsPolicies;
  | 	}
  | 
  | 	@Id @SequenceGenerator(name = "generator", sequenceName = "ID_SEQUENCE")  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")
  | 	@Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
  | 	@NotNull
  | 	public Integer getId() {
  | 		return this.id;
  | 	}
  | 
  | 	public void setId(Integer id) {
  | 		this.id = id;
  | 	}
  | 	@ManyToOne(fetch = FetchType.LAZY)
  | 	@JoinColumn(name = "PARENT_PRODUCTLINE_ID")
  | 	public CcmsProductline getCcmsProductline() {
  | 		return this.ccmsProductline;
  | 	}
  | 
  | 	public void setCcmsProductline(CcmsProductline ccmsProductline) {
  | 		this.ccmsProductline = ccmsProductline;
  | 	}
  | 	@ManyToOne(fetch = FetchType.LAZY)
  | 	@JoinColumn(name = "CREATOR")
  | 	public CcmsUser getCcmsUser() {
  | 		return this.ccmsUser;
  | 	}
  | 
  | 	public void setCcmsUser(CcmsUser ccmsUser) {
  | 		this.ccmsUser = ccmsUser;
  | 	}
  | 
  | 	@Column(name = "NAME", nullable = false, length = 200)
  | 	@NotNull
  | 	@Length(max = 200)
  | 	public String getName() {
  | 		return this.name;
  | 	}
  | 
  | 	public void setName(String name) {
  | 		this.name = name;
  | 	}
  | 
  | 	@Column(name = "DESCRIPTION", length = 4000)
  | 	@Length(max = 4000)
  | 	public String getDescription() {
  | 		return this.description;
  | 	}
  | 
  | 	public void setDescription(String description) {
  | 		this.description = description;
  | 	}
  | 	@Temporal(TemporalType.DATE)
  | 	@Column(name = "MODIFIED", length = 7)
  | 	public Date getModified() {
  | 		return this.modified;
  | 	}
  | 
  | 	public void setModified(Date modified) {
  | 		this.modified = modified;
  | 	}
  | 	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ccmsProductline")
  | 	public Set<CcmsProductline> getCcmsProductlines() {
  | 		return this.ccmsProductlines;
  | 	}
  | 
  | 	public void setCcmsProductlines(Set<CcmsProductline> ccmsProductlines) {
  | 		this.ccmsProductlines = ccmsProductlines;
  | 	}
  | 	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ccmsProductline")
  | 	public Set<CcmsProduct> getCcmsProducts() {
  | 		return this.ccmsProducts;
  | 	}
  | 
  | 	public void setCcmsProducts(Set<CcmsProduct> ccmsProducts) {
  | 		this.ccmsProducts = ccmsProducts;
  | 	}
  | 	@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  | 	@JoinTable(name = "CCMS_POLICY_PRODUCTLINE_Z", joinColumns = @JoinColumn(name = "policy_id"), inverseJoinColumns = @JoinColumn(name = "productline_id"))
  | 	public Set<CcmsPolicy> getCcmsPolicies() {
  | 		return this.ccmsPolicies;
  | 	}
  | 
  | 	public void setCcmsPolicies(Set<CcmsPolicy> ccmsPolicies) {
  | 		this.ccmsPolicies = ccmsPolicies;
  | 	}
  | 	
  | 	public String initCcmsParentProductlineName()
  | 	{
  | 		if(ccmsProductline!=null)
  | 			return ccmsProductline.getName();
  | 		else
  | 			return "";
  | 	}
  | 	
  | 
  | 	@Transient
  | 	@MyProductlineList
  | 	public String getCcmsParentProductlineName() {
  | 		System.out.println("operation called");
  | 		return ccmsParentProductlineName;
  | 	}
  | 	
  | 	@Transient
  | 	public void setCcmsParentProductlineName(String ccmsParentProductlineName) {
  | 		this.ccmsParentProductlineName = ccmsParentProductlineName;
  | 	}
  | 
  | 	@Override
  | 	public String receiveType() {
  | 		// TODO Auto-generated method stub
  | 		return "CcmsProduct/CcmsProductline";
  | 	}
  | 	
  | }

I always get a "Stackoverflow" Exception.

I think i know why, because my Productline i get wants to validate its value and so on. how to avoid this?
Where should I set my validator?

Can you help me?!

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

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



More information about the jboss-user mailing list