我正在构建一个GWT应用程序来访问服务器端使用JDO持久保存的房屋列表。然后通过RPC“getHouseService”将房屋列表移动到客户端以进行显示和操作。之后它们不会被返回并保存在服务器端。
当我运行应用程序并执行RPC服务时,客户端始终会获得一个空列表。 在测试期间,我注意到我在调试模式下的ide(eclipse)注意到getHouse中返回列表的值是StreamingQueryResult。
我做错了什么?我已经坚持这个问题超过一个星期,我无法在线找到相关的解决方案。
这是我编写的用于处理数据持久性的代码:
public static PersistenceManagerFactory getPersistenceManagerFactory() {
return pmfInstance;
}
public void addHouse(List<House> listofHouses) {
PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager();
try {
pm.makePersistentAll(listofHouses);
System.out.println("after makePersistentAll");
}
finally {
pm.close();
}
}
@SuppressWarnings("unchecked")
public List<House> getHouses() {
PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager();
List<House> houseList = (List<House>) pm.newQuery("select from " + House.class.getName()).execute();
return houseList;
}
众议院的课程是:
package vancouverHEA.shared;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import org.datanucleus.jpa.annotations.Extension;
import com.google.gwt.user.client.rpc.IsSerializable;
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class House extends Building implements IsSerializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private Long key;
@Persistent (serialized = "true")
java.lang.Double landPrice;
@Persistent (serialized = "true")
java.lang.Double housePrice;
@Persistent (serialized = "true")
java.lang.Boolean forSale;
@Persistent (serialized = "true")
private java.lang.String realtorContact;
@Persistent (serialized = "true")
private java.lang.Integer listPrice;
@Persistent (serialized = "true")
private java.lang.Integer yrBuilt;
@Persistent (serialized = "true")
private java.lang.Integer yrReno;
@Persistent (serialized = "true")
private java.lang.String postalCode;
@Persistent (serialized = "true")
java.lang.Double latitude;
@Persistent (serialized = "true")
java.lang.Double longitude;
String STRATA = "Strata";
String SINGLE = "Single House" ;
public House(double landPrice, double improvPrice, String address,
String postalCode, int yrBuilt, int yrReno) {
super();
this.landPrice = landPrice;
this.housePrice = improvPrice;
this.address = address;
this.postalCode = postalCode.trim().toUpperCase();
this.yrBuilt = yrBuilt;
this.yrReno = yrReno;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode.trim().toUpperCase();
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public double getPrice() {
return this.landPrice + this.housePrice;
}
public boolean isForSale() {
return forSale;
}
public void setForSale(boolean forSale) {
this.forSale = forSale;
}
public String getRealtorContact() {
return realtorContact;
}
public void setRealtorContact(String realtorContact) {
this.realtorContact = realtorContact;
}
public int getListPrice() {
return listPrice;
}
public void setListPrice(int listPrice) {
this.listPrice = listPrice;
}
public int getYrBuilt() {
return yrBuilt;
}
public void setYrBuilt(int yrBuilt) {
this.yrBuilt = yrBuilt;
}
public int getYrReno() {
return yrReno;
}
public void setYrReno(int yrReno) {
this.yrReno = yrReno;
}
public void setLandPrice(Double landPrice) {
this.landPrice = landPrice;
}
public double getLandPrice(){
return landPrice;
}
public void setHousePrice(Double housePrice) {
this.housePrice = housePrice;
}
public double getHousePrice() {
return housePrice;
}
}
答案 0 :(得分:0)
这可能与此问题中描述的问题相同:GWT retrieve list from datastore via serviceimpl总结列表是惰性加载的,因此如果您通过RPC返回列表,则它尚未读取并返回空列表。关于问题https://stackoverflow.com/a/7646549/66416的答案建议在返回之前调用列表上的size()
,这将触发列表被读取(虽然不确定这是否是最优雅的解决方案)。