Date: 2004-11-30T01:07:39
Editor: JohannesTextor <[EMAIL PROTECTED]>
Wiki: Cocoon Wiki
Page: GettingStartedWithCocoonAndHibernate
URL: http://wiki.apache.org/cocoon/GettingStartedWithCocoonAndHibernate
no comment
Change Log:
------------------------------------------------------------------------------
@@ -1,16 +1,93 @@
= Why would you want to do this? =
''brief outline of the benefits of using an object relational mapping tool,
like for Hibernate or OJB''
+
+The main benefit of an O/R mapping tool is that it enables you to deal with
objects instead of database tables.
+Suppose you are building a web application based on Cocoon alone. You have a
database of articles that is supposed
+to be navigated by users. The pure cocoon / flowscript MVC approach would be
something like:
+
+{{{
+ // ***** Get data from SQL Database (Model Layer) *****
+
+ var db_conn = Database.getConnection("name");
+ var s = db_conn.createStatement();
+ var r = s.executeQuery("SELECT * FROM articles;");
+
+ var articles = new Array();
+ var ri = r.iterator();
+ while(article = ri.next())
+ articles[articles.length] = new Article( article.getString("Name"),
article.getInt("Price"), ... ) )
+
+ // ***** Process data (Control Layer) *****
+
+ /* Do some processing, e.g. add images, comments etc. to the articles in
the array or using CForms */
+
+ // ***** Send data to view (View Layer) *****
+
+ cocoon.sendPage("article-view",{articles:articles});
+}}}
+
+We love flowscript, don't we? In the above example, you can see that both the
Control and the View layer are object oriented.
+However, the Model layer is a relational database, which makes conversion
between M and C necessary - the typical kind of
+boring, repetitive and error-prone coding presented above. Now comes the same
code fragment using Hibernate:
+
+{{{
+ // ***** Get data from Hibernate (Model Layer) *****
+
+ var hs = openHibernateSession();
+ var articles = hs.find("from org.test.Article");
+
+ // ***** Process data (Control Layer) *****
+
+ /* Do some processing, e.g. using CForms to modify some articles or using
CForms */
+
+ // ***** Send data to view (View Layer) *****
+
+ cocoon.sendPage("article-view",{articles:articles});
+}}}
+
+Well this obviously makes your life easier. A Hibernate Session can be thought
of as the object-oriented equivalent
+to a JDBC connection. As you can also see, Hibernate has its own - yet
SQL-similar - query language. The fundamental
+difference is that Hibernate queries yield '''objects''' instead of database
rows, so there is no further conversion
+necessary. You can directly process the result vector and pass it on to the
View.
+
+This is not only true for "flat" beans with simple attributes, it also holds
for complex beans with collection
+attributes, sets, maps, vectors etc - and that is the point where it would get
really messy to construct these
+"by hand" from a relational DB using flowscript. That part is now done by
Hibernate.
+
+The actual mapping between POJO Objects and the database is done by Hibernate.
To accomplish this, it uses so-called
+mapping files. These can - up to a certain degree of complexity - also be
automatically generated from Java code using
+tools that come with Hibernate. Even if you create these files by hand, it is
still easier and more structured than
+writing endless flowscript code.
+
+== Summary ==
+
+Hibernate makes the Model layer of an MVC application compatible with OO-based
V and C layers. A much higher degree of
+abstraction from DB details is the result.
+
+Again an outline of the main benefits:
+
* You don't have to write endless SQL access code anymore. The O/R mapping
tool generates all necessary SQL access code behind the scenes and hands you
the results in POJO format.
* You can manipulate your database (read, insert, delete) using POJO's and
nothing but POJO's.
* Hibernate comes with transparent connection pooling (DBCP) and query
caching (EHCache), only a matter of configuration.
= What must you know before you start? =
+Be aware that you will not be ready to write Hibernate-based applications in 5
minutes. You are about to venture into a complex
+topic. Sit back, get a cup of tea and prepare for some days of reading and
learning. Fortunately, the Hibernate framework is
+excellently documented (see http://www.hibernate.org/). The following skills
are mandatory:
+
''Skills and depth of knowledge required''
* You need to be proficient in Java, have basic SQL knowledge in case you
want to do troubleshooting.
- * You should now how to translate your application domain into a solid
database model.
+ * You should know how to translate your application domain into a solid
database model.
* Understand the "lazy loading" concept that most O/R mapping tools use by
default. This generally means that nothing is retrieved from the database until
you really ask for it. [http://www.hibernate.org/162.html]. Also see below for
notes on lazy collection initialization.
+
+'''Make sure''' that you have understood the last point - if not, read the
Hibernate documentation and then come
+back here. Otherwise you will only get frustrated with the task of integrating
Hibernate into cocoon.
+
+It must be made clear at this point that all documentation on this wiki
focuses on the particular issue of
+integrating Hibernate into cocoon, which is a challenging but rewarding task.
Rewarding, since you will learn
+some things about Cocoon's internal structure you might not have known before.
''Skills and depth of knowledge that could be useful''