WEB开发网
开发学院WEB开发Jsp Java开发2.0: 使用Amazon SimpleDB实现云存储,第... 阅读

Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分

 2010-10-26 12:59:16 来源:Web开发网   
核心提示:将应用移植到 SimpleJPA为了使 Race 和 Runner 类兼容 SimpleJPA,我可以扩展 SimpleJPA 便利基础类,Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分(3),或者将每一个类的 id 属性从 BigInteger 修改为 String,我选择了第一种方法,

将应用移植到 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();

上一页  1 2 3 4  下一页

Tags:Java 开发 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接