You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by zhourui <zh...@zoneland.net> on 2013/05/06 09:42:05 UTC

Entity incompatible with it's superclass

i try to distribute entity with policy. 

public class JPAObjectDistributionPolicy implements DistributionPolicy {

	public String distribute(Object object, List<String> slices, Object
context) {
		return slices.get(((JPAObject) object).getDistributeFactor()
				% slices.size());
	}
}

sometime it will cause error. but Data class is extend from JPAObject class.
after restart websphere application server.it's will work fine.

another question:

after modify JPAObjectDistributionPolicy code.
JPAObjectDistributionPolicy can't be changed by deploy application,must
restart server.

please help me.

Caused by: <openjpa-2.2.1.1-SNAPSHOT-r422266:1438134 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException:
com.plasticmummy.ufsc20.entity.Data incompatible with
com.plasticmummy.ufsc20.entity.JPAObject
	at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:2002)
	at
com.ibm.ws.uow.ComponentContextSynchronizationWrapper.beforeCompletion(ComponentContextSynchronizationWrapper.java:65)
	at
com.ibm.tx.jta.impl.RegisteredSyncs.coreDistributeBefore(RegisteredSyncs.java:291)
	at
com.ibm.ws.tx.jta.RegisteredSyncs.distributeBefore(RegisteredSyncs.java:153)
	at com.ibm.ws.tx.jta.TransactionImpl.prePrepare(TransactionImpl.java:2339)
	at
com.ibm.ws.tx.jta.TransactionImpl.stage1CommitProcessing(TransactionImpl.java:558)
	at
com.ibm.tx.jta.impl.TransactionImpl.processCommit(TransactionImpl.java:1015)
	... 81 more
Caused by: java.lang.ClassCastException: com.plasticmummy.ufsc20.entity.Data
incompatible with com.plasticmummy.ufsc20.entity.JPAObject
	at
com.plasticmummy.ufsc20.common.slice.distribution.policy.JPAObjectDistributionPolicy.distribute(JPAObjectDistributionPolicy.java:12)
	at
org.apache.openjpa.slice.SliceImplHelper.getSlicesByPolicy(SliceImplHelper.java:67)
	at
org.apache.openjpa.slice.jdbc.DistributedJDBCStoreManager.findSliceNames(DistributedJDBCStoreManager.java:138)
	at
org.apache.openjpa.slice.jdbc.DistributedJDBCStoreManager.bin(DistributedJDBCStoreManager.java:343)
	at
org.apache.openjpa.slice.jdbc.DistributedJDBCStoreManager.flush(DistributedJDBCStoreManager.java:258)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2178)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2076)
	at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1994)
	... 87 more

@MappedSuperclass
public abstract class JPAObject implements Serializable {

	private static final long serialVersionUID = 1L;

	public static final int ID_LENGTH = 32;
	@Column(length = ID_LENGTH)
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator =
Generator.UUID_TYPE4_HEX)
	private String id;

	@Version
	private Long version;

	public static final int STATUSOFENTITY_LENGTH = 8;
	@Enumerated(EnumType.STRING)
	@Column(length = STATUSOFENTITY_LENGTH)
	@Index(enabled = true, unique = false)
	private StatusOfEntity statusOfEntity;

	private Integer distributeFactor;

	public String getId() {
		return id;
	}

	public StatusOfEntity getStatusOfEntity() {
		return statusOfEntity;
	}

	public void setStatusOfEntity(StatusOfEntity statusOfEntity) {
		this.statusOfEntity = statusOfEntity;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Long getVersion() {
		return version;
	}

	public void setVersion(Long version) {
		this.version = version;
	}

	public Integer getDistributeFactor() {
		return distributeFactor;
	}

	public void setDistributeFactor(Integer distributeFactor) {
		this.distributeFactor = distributeFactor;
	}
}

@Entity
@Table(name = "T_DATA", schema = "UFSC20")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Data extends JPAObject {
	private static final long serialVersionUID = 1L;
	@Transient
	public static final int CONTENT_LENGTH = 6000;
	@Column(length = CONTENT_LENGTH)
	@Index
	private String content;

	@Transient
	public static final int TITLE_LENGTH = 1000;
	@Column(length = TITLE_LENGTH)
	@Index
	private String title;

	@Transient
	public static final int LINK_LENGTH = 1000;
	@Column(length = LINK_LENGTH)
	@Index
	private String link;

	@Transient
	public static final int UNID_LENGTH = 1000;
	@Column(length = UNID_LENGTH)
	@Index
	private String unid;

	@Temporal(TemporalType.TIMESTAMP)
	@Index
	private Date date;

	@Transient
	public static final int PROJECT_LENGTH = 200;
	@Column(length = PROJECT_LENGTH)
	@Index
	private String project;

	@Transient
	public static final int CATEGORY_LENGTH = 200;
	@Column(length = CATEGORY_LENGTH)
	@Index
	private String category;

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =
"data")
	private Set<ScopeUser> scopeUsers;

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =
"data")
	private Set<ScopeGroup> scopeGroups;

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =
"data")
	private Set<ScopeRole> scopeRoles;

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getLink() {
		return link;
	}

	public void setLink(String link) {
		this.link = link;
	}

	public String getCategory() {
		return category;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	public String getUnid() {
		return unid;
	}

	public void setUnid(String unid) {
		this.unid = unid;
	}

	public Set<ScopeUser> getScopeUsers() {
		return scopeUsers;
	}

	public void setScopeUsers(Set<ScopeUser> scopeUsers) {
		this.scopeUsers = scopeUsers;
	}

	public Set<ScopeGroup> getScopeGroups() {
		return scopeGroups;
	}

	public void setScopeGroups(Set<ScopeGroup> scopeGroups) {
		this.scopeGroups = scopeGroups;
	}

	public Set<ScopeRole> getScopeRoles() {
		return scopeRoles;
	}

	public void setScopeRoles(Set<ScopeRole> scopeRoles) {
		this.scopeRoles = scopeRoles;
	}

	public String getProject() {
		return project;
	}

	public void setProject(String project) {
		this.project = project;
	}

}







--
View this message in context: http://openjpa.208410.n2.nabble.com/Entity-incompatible-with-it-s-superclass-tp7583838.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.