Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分
2010-10-26 12:59:16 来源:Web开发网将应用移植到 SimpleJPA
为了使 Race 和 Runner 类兼容 SimpleJPA,我可以扩展 SimpleJPA 便利基础类,或者将每一个类的 id 属性从 BigInteger 修改为 String。我选择了第一种方法,如清单 6 所示:
清单 6. 修改 Race 类为使用 SimpleJPA 的 IdedTimestampedBase 基础类
@Entity
public class Race extends IdedTimestampedBase{
private String name;
private String location;
private double distance;
private List<Runner> runners;
@OneToMany(mappedBy = "race")
public List<Runner> getRunners() {
return runners;
}
//other setters and getters left out...
}
虽然我不会向您显示 Runner 中相同的代码,但是您可以随时查看这些代码:扩展 IdedTimestampedBase,并删除 Runner 的 id 属性。
修改 Race 和 Runner 的 ID 是使赛跑应用符合 SimpleJPA 规范的第一步。接下来,我需要将基本数据类型(如,double、int 和 float)转换为诸如 Integer 和 BigDecimal 的对象。
我将从修改 Race 的 distance 属性开始。我发现(在当前版本的 SimpleJPA 中)使用 BigDecimal 比 Double 更可靠,所以我将 Race 的 distance 修改为 BigDecimal,如清单 7 所示:
清单 7. 将 distance 修改为 BigDecimal
@Entity
public class Race extends IdedTimestampedBase{
private String name;
private String location;
private BigDecimal distance;
private List<Runner> runners;
@OneToMany(mappedBy = "race")
public List<Runner> getRunners() {
return runners;
}
//other setters and getters left out...
}
现在 Runner 和 Race 都已经可以通过 SimpleJPA 实现进行持久化了。
使用 SimpleJPA 操作 SimpleDB
使用 SimpleJPA 来处理您的域对象在 SimpleDB 中的存储与使用 JPA 实现进行普通的关系数据库存储差别不大。即使您从未使用过 JPA 开发应用,那么对于您来说它也不会有太大的困难。唯一的新东西是要配置 SimpleJPA 的 EntityManagerFactoryImpl,这要求使用您的 Amazon Web Services 证书和您的 SimpleDB 域的前缀名。(另一个方法是在编译路径上增加一个包含您的证书的属性文件。)
在创建一个 SimpleJPA EntityManagerFactoryImpl 实例时使用您指定的前缀名,这样产生的 SimpleDB 域会由您的前缀,加一根横杠,再加域对象名称组成。所以,如果我指定 “b50” 为前缀,而我在 SimpleDB 中创建一个 Race,那么这个域将会是 “b50-Race”。
一旦您创建一个 SimpleDB EntityManagerFactoryImpl 实例,其他方面就由这个接口完成了。您需要使用一个 EntityManager 实例,这个实例是从 EntityManagerFactoryImpl 获取的,如清单 8 所示:
清单 8. 获得一个 EntityManager
Map<String,String> props = new HashMap<String,String>();
props.put("accessKey","...");
props.put("secretKey","..");
EntityManagerFactoryImpl factory =
new EntityManagerFactoryImpl("b50", props);
EntityManager em = factory.createEntityManager();
更多精彩
赞助商链接