你英文好吗,好,有很多资料,不好没关系,等等,目前JDO还有一些先天缺陷,等成熟了,中文也有了,你有JDBC基础,JDO是很容易的!

解决方案 »

  1.   

    第一步是构建源代码(.java 文件)。理论上,我们在这一步构建的对象源不必具有持久性。例如您可以构建一组代表人员(PersonImpl.java)、地址(AddressImpl.java)以及部门(DepartmentImpl.java)的源文件而不需要知道这些类最终将与数据库进行相互操作。使用标准 Java 编译器,将这些源文件编译成 .class 文件。实际上,如果知道我们要将 JDO 用于对象持久性,能使我们将更好的性能技术构建到对象模型中。下一步是确定什么类需要持久性。确定类之后,上一步中生成的 .class 文件输出就用类增强器增强。这一步很可能由开发实现类的人员来完成,因为他或她具有关于实现的基本知识。为了使用类增强器,您必须构建元数据文件(以 XML 格式),该文件标识哪些类需要持久性,以及有关这些类的任何附加信息。类增强器将 .class 文件与元数据组合在一起。输出是修改过的 .class 文件。类增强使构建过程与现有 IDE 集成很困难。它也是用 JDO 进行开发的最有争议的方面。修改 .class 文件是一种需好好研究的巧妙形式,而且已开发了工具来协助直接进行类的修改。尽管如此,要让您理解涉及创建与源代码并不对应的 .class 文件的过程,仍很困难。如果您使用诸如 Ant 那样的构建工具,那么它会在幕后为您无缝地完成一切操作。下一步是使用已增强的 .class 文件和 JDO 接口来构建应用程序对象。尽管持久性对象不使用 JDO API 和实现,但应用程序对象将使用 JDO API 来控制持久对象的持久性、事务以及查询机制。在应用程序中,要与之打交道的主要部分是与特定数据源相关联的 PersistenceManager。我们将在整篇教程中都使用持久性管理器。在构建应用程序时,我们还使用实际的数据库模式。通常,JDO 实现包含一个工具,它从前几步中创建的元数据和已增强的类文件中自动创建数据库模式
      

  2.   

    package com.stereobeacon.jdo.tutorial;public class AddressImpl {
    public String addressLine1;
    public String addressLine2;
    public String city;
    public String state;
    public String zip; public AddressImpl(String addr1, String addr2, String city, String state, String zip){
    addressLine1=addr1;
    addressLine2=addr2;
    this.city=city;
    this.state=state;
    this.zip=zip;
    } public String getAddressLine1() {
    return addressLine1;
    } public void setAddressLine1(String addressLine1) {
    this.addressLine1 = addressLine1;
    } public String getAddressLine2() {
    return addressLine2;
    } public void setAddressLine2(String addressLine2) {
    this.addressLine2 = addressLine2;
    } public String getCity() {
    return city;
    } public void setCity(String city) {
    this.city = city;
    } public String getState() {
    return state;
    } public void setState(String state) {
    this.state = state;
    } public String getZip() {
    return zip;
    } public void setZip(String zip) {
    this.zip = zip;
    }}
      

  3.   

    <?xml version="1.0"?>
    <!DOCTYPE jdo SYSTEM "jdo.dtd">
    <jdo>
       <package name="com.stereobeacon.jdo.tutorial">
         <class name="AddressImpl">
             <field name="addressLine1"/>
             <field name="addressLine2"/>
             <field name="city"/>
             <field name="state"/>
             <field name="zip"/>
         </class>
       </package>
    </jdo>
      

  4.   

    谢谢,太感谢了。虽然我还是不懂。
    “如果您使用诸如 Ant 那样的构建工具,那么它会在幕后为您无缝地完成一切操作”jbuilder有Ant啊,jbuilder怎么在幕后为您无缝地完成一切操作?
      

  5.   

    要运行与 LiDO 一起提供的类增强器,您必须将增强器指向元数据文件。然后该增强器将查找需要修改的 .class 文件。下列命令将为增强器指出正确方向:
    java com.libelis.lido.Enhance -metadata metadata.jdo
    注:这一步出现了问题。由于没有与 IDE 紧密耦合,现在类文件与源文件不相同。许多 IDE 自动重新生成类文件,而这些类文件会除去增强器所做的任何更改。希望下一代 IDE 能将 JDO 增强构建到工具中。
    有了一些 JDO 实现,您可能需要构建数据库来支持持久性对象。您很可能有自动执行此过程的工具。我们的 LiDO 版提供了构建数据库模式的命令行工具。只须重用我们上一步构建的元数据,并且给出数据库驱动程序的名称(在本例中是 MM.MySQL 驱动程序)以及将数据库标识到驱动程序的 URI。正如前面提到的,在运行这个命令之前需要创建 jdotut 数据库。在 MySQL 管理控制台内可以创建数据库。运行下列命令以创建数据库模式:
    java com.libelis.lido.ds.jdbc.DefineSchema
             -driver org.gjt.mm.mysql.Driver
             -database jdbc:mysql://localhost/jdotut
             -metadata metadata.jdo
    运行该命令后,您就会有一张表,可以存储我们创建的任何具有持久性的地址。源代码中的批处理文件 defineschema.bat 中包含了这个命令。
    在以下应用程序中,我们将创建类 Address 的实例。该实例具有持久性之后,应用程序将退出。您会注意到程序的几个特殊部分,如下所示:JDO 设置 
    事务操作 
    对象生命周期 
    至 JDO 的持久性接口 
    以下是应用程序代码:
    package com.stereobeacon.jdo.tutorial;import javax.jdo.PersistenceManagerFactory;
    import javax.jdo.PersistenceManager;
    import javax.jdo.Transaction;public class Test1 {
        public static final String DBURL = "jdbc:mysql://localhost/jdotut";
        public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";    public static void main(String[] args) {
           try {
              /*
               * SETUP JDO
               */
              // first create and set up a persistence manager
              // factory
              PersistenceManagerFactory pmf =
                 (PersistenceManagerFactory) Class
                    .forName("com.libelis.lido.PersistenceManagerFactory")
                    .newInstance();
     pmf.setConnectionURL(DBURL);
     pmf.setConnectionDriverName(DBDRIVER);  // now retrieve the persistence manager associated
     // with the parameters setup in the factory
     PersistenceManager pm = pmf.getPersistenceManager();          /*
               * START A TRANSACTION
               */
              // retrieve the current transaction
     Transaction t = pm.currentTransaction();
              // start a new transaction
     t.begin();          /*
               * CREATE AN OBJECT INSTANCE
               */
              AddressImpl a =
        new AddressImpl("7700 Technology Way", "", "Denver", "CO", "80237");          /*
               * MAKE THE OBJECT PERSISTENT
               */
     pm.makePersistent(a);          /*
               * COMMIT THE OBJECT TO STORAGE
               */  // commit the transaction, all changes made between
     // the begin and commit are set to the db
     t.commit();          /*
               * CLEANUP AND EXIT
               */
              pm.close();
            } catch (Exception e) {
              e.printStackTrace();
            }
        }
    }
      

  6.   

    现在,让我们查看一下构建应用程序代码的每个详细步骤。设置 JDO:JDO 在整个体系结构中都利用了类工厂。设置持久性管理器工厂指底层 JDO 实现如何确定哪个 PersistenceManager 应该用于特定数据源。工厂获得相关信息后,您就从工厂用 getPersistenceManager 调用检索 PersistenceManager。
    启动事务:JDO 中的对象是第一级事务参与者。这意味着我们需要更改事务内的对象。(有关事务,您可以查询 JDO 规范,因为有多种支持选项。)我们调用持久性管理器获取对当前事务的引用,本例中,我们 begin 一个新事务。
    创建对象实例:按常规进行对象创建。您应该记住实际的运行时调用是对已增强的类进行的。
    使对象具有持久性:假设针对对象运行类增强器,makePersistent 方法调用使传递给它的任何对象具有持久性,尽管直到事务提交之后这些对象才可见。
    将对象提交给存储器:将对象提交给存储器使对象实例解锁,从而使可能正在寻找同一类型的对象实例的其它进程可以得到它。
    清除并退出:使用持久性管理器完成操作后关闭它。 
      

  7.   

    这可真是长途跋涉,但我们已经准备好运行应用程序了。本章中,我们将只运行构建第一个实例的应用程序,然后会查阅对表所作的更改。在 Windows 操作环境中,类似以下的批处理程序的程序就足够了:
    set CLASSPATH=C:\java\mm.mysql-2.0.14\mm.mysql-2.0.14-bin.jar;
    set CLASSPATH=C:\java\mm.mysql-2.0.14\lib\jdbc2_0-stdext.jar;%CLASSPATH%
    set CLASSPATH=C:\java\mm.mysql-2.0.14\lib\jta-spec1_0_1.jar;%CLASSPATH%
    set CLASSPATH=c:\java\LiDO\lib\j2ee.jar;%CLASSPATH%
    set CLASSPATH=c:\java\LiDO\lib\lido-rt.jar;%CLASSPATH%
    set CLASSPATH=c:\java\LiDO\lib\lido-dev.jar;%CLASSPATH%
    set CLASSPATH=c:\java\LiDO\lib\lido-rdb.jar;%CLASSPATH%
    set CLASSPATH=c:\java\LIDO\bin;%CLASSPATH%
    set CLASSPATH=.;%CLASSPATH%java com.stereobeacon.jdo.tutorial.Test1
    请注意上述程序包含了 JDBC 驱动程序、Java 2 企业版 jar 文件(与 JDO 实现包含在一起)、LiDO jar 文件以及 LiDO 的 bin 目录。之所以包含 bin 目录,是因为 LiDO 需要在 CLASSPATH 中包含产品许可证,而许可证保存在 bin 目录中。运行测试将不会产生可见的输出。多次运行测试将把同一个记录多次添加到底层数据库中。产生这一行为(而不是产生重复键异常)的原因是我们让 LiDO 负责生成唯一性键。另一种选择是在有关类的元数据中定义主键。解决了 CLASSPATH 的任何问题后,运行 addressCreate.bat 文件以启动样本。