Modified: incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_why.xml URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_why.xml?rev=434517&r1=434516&r2=434517&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_why.xml (original) +++ incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_overview_why.xml Thu Aug 24 13:41:12 2006 @@ -1,371 +1,665 @@ - - <chapter id="jpa_overview_why"> - <title>Why JPA?</title> - <indexterm zone="jpa_overview_why"> - <primary>JPA</primary> - <secondary>why</secondary> - </indexterm> - <para> - Java developers who need to store and retrieve persistent - data already have several options available to them: - serialization, JDBC, JDO, proprietary object-relational mapping tools, - object databases, and EJB 2 entity beans. Why introduce yet - another persistence framework? The answer to this question is that with - the exception of JDO, each of the aforementioned persistence solutions - has severe limitations. JPA attempts to overcome these - limitations, as illustrated by the table below. - </para> - <table tocentry="1"> - <title>Persistence Mechanisms</title> +<chapter id="jpa_overview_why"> + <title> + Why JPA? + </title> + <indexterm zone="jpa_overview_why"> + <primary> + JPA + </primary> + <secondary> + why + </secondary> + </indexterm> + <para> +Java developers who need to store and retrieve persistent data already have +several options available to them: serialization, JDBC, JDO, proprietary +object-relational mapping tools, object databases, and EJB 2 entity beans. Why +introduce yet another persistence framework? The answer to this question is that +with the exception of JDO, each of the aforementioned persistence solutions has +severe limitations. JPA attempts to overcome these limitations, as illustrated +by the table below. + </para> + <table tocentry="1"> + <title> + Persistence Mechanisms + </title> <tgroup cols="8" align="left" colsep="1" rowsep="1"> - <colspec colname="sup"/> - <colspec colname="ser"/> - <colspec colname="jdbc"/> - <colspec colname="or"/> - <colspec colname="objdb"/> - <colspec colname="ejb2"/> - <colspec colname="jdo"/> - <colspec colname="ejb3"/> - <thead> - <row> - <entry colname="sup">Supports:</entry> - <entry colname="ser">Serialization</entry> - <entry colname="jdbc">JDBC</entry> - <entry colname="or">ORM</entry> - <entry colname="objdb">ODB</entry> - <entry colname="ejb2">EJB 2</entry> - <entry colname="jdo">JDO</entry> - <entry colname="ejb3">JPA</entry> - </row> - </thead> - <tbody> - <row> - <entry colname="sup">Java Objects</entry> - <entry colname="ser"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdbc">No</entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup">Advanced OO Concepts</entry> - <entry colname="ser"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdbc">No</entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb2">No</entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup">Transactional Integrity</entry> - <entry colname="ser">No</entry> - <entry colname="jdbc"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup">Concurrency</entry> - <entry colname="ser">No</entry> - <entry colname="jdbc"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup">Large Data Sets</entry> - <entry colname="ser">No</entry> - <entry colname="jdbc"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup">Existing Schema</entry> - <entry colname="ser">No</entry> - <entry colname="jdbc"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb">No</entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup"> + <colspec colname="sup"> + </colspec> + <colspec colname="ser"> + </colspec> + <colspec colname="jdbc"> + </colspec> + <colspec colname="or"> + </colspec> + <colspec colname="objdb"> + </colspec> + <colspec colname="ejb2"> + </colspec> + <colspec colname="jdo"> + </colspec> + <colspec colname="jpa"> + </colspec> + <thead> + <row> + <entry colname="sup"> + Supports: + </entry> + <entry colname="ser"> + Serialization + </entry> + <entry colname="jdbc"> + JDBC + </entry> + <entry colname="or"> + ORM + </entry> + <entry colname="objdb"> + ODB + </entry> + <entry colname="ejb2"> + EJB 2 + </entry> + <entry colname="jdo"> + JDO + </entry> + <entry colname="jpa"> + JPA + </entry> + </row> + </thead> + <tbody> + <row> + <entry colname="sup"> + Java Objects + </entry> + <entry colname="ser"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdbc"> + No + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Advanced OO Concepts + </entry> + <entry colname="ser"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdbc"> + No + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="ejb2"> + No + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Transactional Integrity + </entry> + <entry colname="ser"> + No + </entry> + <entry colname="jdbc"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Concurrency + </entry> + <entry colname="ser"> + No + </entry> + <entry colname="jdbc"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Large Data Sets + </entry> + <entry colname="ser"> + No + </entry> + <entry colname="jdbc"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Existing Schema + </entry> + <entry colname="ser"> + No + </entry> + <entry colname="jdbc"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + No + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Relational and Non-Relational Stores - </entry> - <entry colname="ser">No</entry> - <entry colname="jdbc">No</entry> - <entry colname="or">No</entry> - <entry colname="objdb">No</entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3">No</entry> - </row> - <row> - <entry colname="sup">Queries</entry> - <entry colname="ser">No</entry> - <entry colname="jdbc"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup">Strict Standards / Portability</entry> - <entry colname="ser"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdbc">No</entry> - <entry colname="or">No</entry> - <entry colname="objdb">No</entry> - <entry colname="ejb2"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - <row> - <entry colname="sup">Simplicity</entry> - <entry colname="ser"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="jdbc"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="or"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="objdb"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb2">No</entry> - <entry colname="jdo"> - <emphasis role="bold">Yes</emphasis> - </entry> - <entry colname="ejb3"> - <emphasis role="bold">Yes</emphasis> - </entry> - </row> - </tbody> + + </entry> + <entry colname="ser"> + No + </entry> + <entry colname="jdbc"> + No + </entry> + <entry colname="or"> + No + </entry> + <entry colname="objdb"> + No + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + No + </entry> + </row> + <row> + <entry colname="sup"> + Queries + </entry> + <entry colname="ser"> + No + </entry> + <entry colname="jdbc"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Strict Standards / Portability + </entry> + <entry colname="ser"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdbc"> + No + </entry> + <entry colname="or"> + No + </entry> + <entry colname="objdb"> + No + </entry> + <entry colname="ejb2"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + <row> + <entry colname="sup"> + Simplicity + </entry> + <entry colname="ser"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jdbc"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="or"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="objdb"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="ejb2"> + No + </entry> + <entry colname="jdo"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + <entry colname="jpa"> + <emphasis role="bold"> + Yes + </emphasis> + </entry> + </row> + </tbody> </tgroup> - </table> - <itemizedlist> + </table> + <itemizedlist> <listitem> - <para><indexterm><primary>serialization</primary></indexterm><indexterm><primary>JPA</primary><secondary>vs serialization</secondary></indexterm><emphasis>Serialization</emphasis> is Java's - built-in mechanism for transforming an object graph into a - series of bytes, which can then be sent over the network or - stored in a file. Serialization is very easy to use, - but it is also very limited. It must store and retrieve the - entire object graph at once, making it unsuitable for - dealing with large amounts of data. It cannot undo changes - that are made to objects if an error occurs while updating - information, making it unsuitable for applications that - require strict data integrity. Multiple threads or programs - cannot read and write the same serialized data concurrently - without conflicting with each other. It provides no query - capabilities. All these factors make serialization useless - for all but the most trivial persistence needs. - </para> + <para> + <indexterm> + <primary> + serialization + </primary> + </indexterm> + <indexterm> + <primary> + JPA + </primary> + <secondary> + vs serialization + </secondary> + </indexterm> +<emphasis>Serialization</emphasis> is Java's built-in mechanism for transforming +an object graph into a series of bytes, which can then be sent over the network +or stored in a file. Serialization is very easy to use, but it is also very +limited. It must store and retrieve the entire object graph at once, making it +unsuitable for dealing with large amounts of data. It cannot undo changes that +are made to objects if an error occurs while updating information, making it +unsuitable for applications that require strict data integrity. Multiple threads +or programs cannot read and write the same serialized data concurrently without +conflicting with each other. It provides no query capabilities. All these +factors make serialization useless for all but the most trivial persistence +needs. + </para> </listitem> <listitem> - <para><indexterm><primary>Java Database Connectivity</primary><see>JDBC</see></indexterm><indexterm><primary>JDBC</primary></indexterm><indexterm><primary>JPA</primary><secondary>vs JDBC</secondary></indexterm> - Many developers use the - <emphasis>Java Database Connectivity</emphasis> (JDBC) APIs to - manipulate persistent data in relational databases. JDBC - overcomes most of the shortcomings of serialization: - it can handle large amounts of data, has mechanisms to ensure - data integrity, supports concurrent access to information, and - has a sophisticated query language in SQL. Unfortunately, JDBC - does not duplicate serialization's ease of use. The relational - paradigm used by JDBC was not designed for storing objects, - and therefore forces you to either abandon - object-oriented programming for the portions of your code - that deal with persistent data, or to find a way of mapping - object-oriented concepts like inheritance to relational - databases yourself. - </para> + <para> + <indexterm> + <primary> + Java Database Connectivity + </primary> + <see> + JDBC + </see> + </indexterm> + <indexterm> + <primary> + JDBC + </primary> + </indexterm> + <indexterm> + <primary> + JPA + </primary> + <secondary> + vs JDBC + </secondary> + </indexterm> +Many developers use the <emphasis>Java Database Connectivity</emphasis> (JDBC) +APIs to manipulate persistent data in relational databases. JDBC overcomes most +of the shortcomings of serialization: it can handle large amounts of data, has +mechanisms to ensure data integrity, supports concurrent access to information, +and has a sophisticated query language in SQL. Unfortunately, JDBC does not +duplicate serialization's ease of use. The relational paradigm used by JDBC was +not designed for storing objects, and therefore forces you to either abandon +object-oriented programming for the portions of your code that deal with +persistent data, or to find a way of mapping object-oriented concepts like +inheritance to relational databases yourself. + </para> </listitem> <listitem> - <para><indexterm><primary>object-relational mapping</primary><see>ORM</see></indexterm><indexterm><primary>ORM</primary></indexterm><indexterm><primary>JPA</primary><secondary>vs ORM products</secondary></indexterm> - There are many proprietary software products that can perform the - mapping between objects and relational database tables for you. - These <emphasis>object-relational mapping</emphasis> (ORM) - frameworks allow you to focus on the object model and not concern - yourself with the mismatch between - the object-oriented and relational paradigms. Unfortunately, - each of these product has its own set of APIs. - Your code becomes tied to the proprietary interfaces of a single - vendor. If the vendor raises prices, fails to fix show-stopping - bugs, or falls behind in features, you cannot switch to another - product without rewriting all of your persistence code. This is - referred to as vendor lock-in. - </para> + <para> + <indexterm> + <primary> + object-relational mapping + </primary> + <see> + ORM + </see> + </indexterm> + <indexterm> + <primary> + ORM + </primary> + </indexterm> + <indexterm> + <primary> + JPA + </primary> + <secondary> + vs ORM products + </secondary> + </indexterm> +There are many proprietary software products that can perform the mapping +between objects and relational database tables for you. These <emphasis> +object-relational mapping</emphasis> (ORM) frameworks allow you to focus on the +object model and not concern yourself with the mismatch between the +object-oriented and relational paradigms. Unfortunately, each of these product +has its own set of APIs. Your code becomes tied to the proprietary interfaces of +a single vendor. If the vendor raises prices, fails to fix show-stopping bugs, +or falls behind in features, you cannot switch to another product without +rewriting all of your persistence code. This is referred to as vendor lock-in. + </para> </listitem> <listitem> - <para><indexterm><primary>object database</primary><see>ODB</see></indexterm><indexterm><primary>ODB</primary></indexterm><indexterm><primary>JPA</primary><secondary>vs ODBs</secondary></indexterm><indexterm><primary>ODBMG</primary></indexterm> - Rather than map objects to relational databases, some software - companies have developed a form of database designed - specifically to store objects. These - <emphasis>object databases</emphasis> (ODBs) are often much - easier to use than object-relational mapping software. - The Object Database Management Group (ODMG) was formed to create - a standard API for accessing object databases; few object - database vendors, however, comply with the ODMG's - recommendations. Thus, vendor lock-in plagues object databases - as well. Many companies are also hesitant to switch from - tried-and-true relational systems to the relatively unknown object - database technology. Fewer data-analysis tools are available - for object database systems, and there are vast quantities of - data already stored in older relational databases. For all of - these reasons and more, object databases have not caught on - as well as their creators hoped. - </para> + <para> + <indexterm> + <primary> + object database + </primary> + <see> + ODB + </see> + </indexterm> + <indexterm> + <primary> + ODB + </primary> + </indexterm> + <indexterm> + <primary> + JPA + </primary> + <secondary> + vs ODBs + </secondary> + </indexterm> + <indexterm> + <primary> + ODBMG + </primary> + </indexterm> +Rather than map objects to relational databases, some software companies have +developed a form of database designed specifically to store objects. These +<emphasis>object databases</emphasis> (ODBs) are often much easier to use than +object-relational mapping software. The Object Database Management Group (ODMG) +was formed to create a standard API for accessing object databases; few object +database vendors, however, comply with the ODMG's recommendations. Thus, vendor +lock-in plagues object databases as well. Many companies are also hesitant to +switch from tried-and-true relational systems to the relatively unknown object +database technology. Fewer data-analysis tools are available for object database +systems, and there are vast quantities of data already stored in older +relational databases. For all of these reasons and more, object databases have +not caught on as well as their creators hoped. + </para> </listitem> <listitem> - <para><indexterm><primary>Enterprise Java Beans</primary><see>EJB</see></indexterm><indexterm><primary>EJB</primary></indexterm><indexterm><primary>JPA</primary><secondary>vs EJB 2</secondary></indexterm> - The Enterprise Edition of the Java platform introduced entity - Enterprise Java Beans (EJBs). EJB 2.x entities are components that - represent persistent information in a datastore. Like - object-relational mapping solutions, EJB 2.x entities provide - an object-oriented view of persistent data. Unlike - object-relational software, however, EJB 2.x entities are not - limited to relational databases; the persistent information they - represent may come from an Enterprise Information System (EIS) or - other storage device. Also, EJB 2.x entities use a strict standard, - making them portable across vendors. Unfortunately, the EJB 2.x - standard is somewhat limited in the object-oriented concepts it can - represent. Advanced features like inheritance, polymorphism, and - complex relations are absent. Additionally, EBJ 2.x entities are - difficult to code, and they require heavyweight and often expensive - application servers to run. - </para> + <para> + <indexterm> + <primary> + Enterprise Java Beans + </primary> + <see> + EJB + </see> + </indexterm> + <indexterm> + <primary> + EJB + </primary> + </indexterm> + <indexterm> + <primary> + JPA + </primary> + <secondary> + vs EJB 2 + </secondary> + </indexterm> +The Enterprise Edition of the Java platform introduced entity Enterprise Java +Beans (EJBs). EJB 2.x entities are components that represent persistent +information in a datastore. Like object-relational mapping solutions, EJB 2.x +entities provide an object-oriented view of persistent data. Unlike +object-relational software, however, EJB 2.x entities are not limited to +relational databases; the persistent information they represent may come from an +Enterprise Information System (EIS) or other storage device. Also, EJB 2.x +entities use a strict standard, making them portable across vendors. +Unfortunately, the EJB 2.x standard is somewhat limited in the object-oriented +concepts it can represent. Advanced features like inheritance, polymorphism, and +complex relations are absent. Additionally, EBJ 2.x entities are difficult to +code, and they require heavyweight and often expensive application servers to +run. + </para> </listitem> <listitem> - <para><indexterm><primary>JDO</primary></indexterm><indexterm><primary>JPA</primary><secondary>vs JDO</secondary></indexterm> - The JDO specification uses an API that is strikingly similar to - JPA. JDO, however, supports non-relational databases, - a feature that some argue dilutes the specification. - </para> + <para> + <indexterm> + <primary> + JDO + </primary> + </indexterm> + <indexterm> + <primary> + JPA + </primary> + <secondary> + vs JDO + </secondary> + </indexterm> +The JDO specification uses an API that is strikingly similar to JPA. JDO, +however, supports non-relational databases, a feature that some argue dilutes +the specification. + </para> </listitem> - </itemizedlist> - <para><indexterm><primary>JPA</primary></indexterm> - JPA combines the best features from each of the persistence - mechanisms listed above. Creating entities under JPA - is as simple as creating serializable classes. JPA supports the - large data sets, data consistency, concurrent use, and query capabilities of - JDBC. Like object-relational software and object databases, JPA - allows the use of advanced object-oriented concepts such as inheritance. - JPA avoids vendor lock-in by relying on a strict specification - like JDO and EJB 2.x entities. JPA focuses on relational - databases. And like JDO, JPA is extremely easy to use. - </para> - <note> + </itemizedlist> + <para> + <indexterm> + <primary> + JPA + </primary> + </indexterm> +JPA combines the best features from each of the persistence mechanisms listed +above. Creating entities under JPA is as simple as creating serializable +classes. JPA supports the large data sets, data consistency, concurrent use, and +query capabilities of JDBC. Like object-relational software and object +databases, JPA allows the use of advanced object-oriented concepts such as +inheritance. JPA avoids vendor lock-in by relying on a strict specification like +JDO and EJB 2.x entities. JPA focuses on relational databases. And like JDO, JPA +is extremely easy to use. + </para> + <note> <para> - OpenJPA typically stores data in relational databases, but can be - customized for use with non-relational datastores as well. +OpenJPA typically stores data in relational databases, but can be customized for +use with non-relational datastores as well. + </para> + </note> + <para> +JPA is not ideal for every application. For many applications, though, it +provides an exciting alternative to other persistence mechanisms. </para> - </note> - <para> - JPA is not ideal for every application. For many applications, - though, it provides an exciting alternative to other persistence mechanisms. - </para> - </chapter> +</chapter>
Modified: incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_resources.xml URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_resources.xml?rev=434517&r1=434516&r2=434517&view=diff ============================================================================== --- incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_resources.xml (original) +++ incubator/openjpa/trunk/openjpa-project/src/doc/manual/jpa_resources.xml Thu Aug 24 13:41:12 2006 @@ -1,39 +1,39 @@ - - <appendix id="jpa_resources"> - <title>JPA Resources</title> +<appendix id="jpa_resources"> + <title> + JPA Resources + </title> <itemizedlist> - <listitem> - <para> - <ulink url="http://java.sun.com/aboutJava/communityprocess/jsr/jsr_220_dataobj.html"> - EJB 3 JSR page</ulink> - </para> - </listitem> - <listitem> - <para> - <ulink url="http://java.sun.com/products/ejb">Sun EJB page</ulink> - </para> - </listitem> - <listitem> - <para> - <ulink url="http://java.sun.com/javaee/5/docs/api/index.html">Locally mirrored - javax.persistence Javadoc</ulink> - </para> - </listitem> - <listitem> - <para> - <ulink url="../../api/index.html">OpenJPA API Javadoc</ulink> - </para> - </listitem> - <listitem> - <para> - <ulink url="../apidocs/index.html">Full OpenJPA Javadoc</ulink> - </para> - </listitem> - <listitem> - <para> - <ulink url="Persistence.pdf">Locally mirrored JPA - specification</ulink> - </para> - </listitem> + <listitem> + <para> +<ulink url="http://java.sun.com/aboutJava/communityprocess/jsr/jsr_220_dataobj.html"> +EJB 3 JSR page</ulink> + </para> + </listitem> + <listitem> + <para> +<ulink url="http://java.sun.com/products/ejb">Sun EJB page</ulink> + </para> + </listitem> + <listitem> + <para> +<ulink url="http://java.sun.com/javaee/5/docs/api/index.html">Locally mirrored +javax.persistence Javadoc</ulink> + </para> + </listitem> + <listitem> + <para> +<ulink url="../../api/index.html">OpenJPA API Javadoc</ulink> + </para> + </listitem> + <listitem> + <para> +<ulink url="../apidocs/index.html">Full OpenJPA Javadoc</ulink> + </para> + </listitem> + <listitem> + <para> +<ulink url="Persistence.pdf">Locally mirrored JPA specification</ulink> + </para> + </listitem> </itemizedlist> - </appendix> +</appendix>