Wednesday, August 27th, 2008...10:03 am

Eclipselink in J2SE RCP Applications

Jump to Comments

In this article I’ll go over integrating EclipseLink into an RCP application. I will not explain every detail of the JPA specification however. The source code this article is partially based off of is currently pending IP Review for inclusion in the official EclipseLink project, however you may download it now from here. You can follow the inclusion status on the official bug report. If you just want to browse the source, check out the org.eclipse.* projects in our anon SVN. This example requires the OSGi branch of EclipseLink, which you can get here.

It requires a derby database which you can download from here, simply run the startNetworkServer.bat in the bin directory to start it.

Introduction

Eclipselink is a part of the Eclipse Project. It’s an ORM that implements the JPA 1.0 specification, the main commiters on the project are Oracle employees, and Eclipselink is based on the mature Toplink library, in fact Toplink is being renamed Eclipselink for future releases.

Why use JPA?

JPA is the official persistence specification for EJB 3, it’s not going anywhere and you’re going to have an easier time finding other developers who are familiar with the JPA specification. What’s even better is the EclipseLink implementation is the JPA 2.0 reference specification, so there’s a good chance some features you enjoy in the EclipseLink implementation will be present in the JPA 2 specification as well.

Why bother with an ORM?

When you’re coding an RCP application, chances are you’re already passing around Java Beans that represent your data model. If you could have the mapping take place automatically from your database to java beans, it just makes your life that much easier. Once you add the power of libraries like Jface Databinding it’s hard to go back to any other method of data access.

Death to XML

Thankfully EclipseLink does not require much XML, the only xml file I create is a persistence.xml that simply lists all my entity classes. A nice editor is included with the JPA Tools plugin that makes managing it simple. All other configuration can be done via annotations.

Tons more after the Jump!

High Level Plug-in Architecture

I like to split my project into 2 main parts. You could put it all in one plugin, but this is how I do it.

UI

This plugin contains all my UI code. Views, Perspectices, Editors, etc. No data access code should occur here though. Instead we’ll just use our model plugin. This isn’t an RCP tutorial, so I’m going to assume you know your way around the base RCP classes and project set up.

The Model

The model plugin is where all the data access work takes place, from here we can separate 3 main concerns.

Connection Set Up (EntityManagerFactory)
The EclipseLink class that takes care of creating database connection, configuring pooling, or re-using an exisiting datasource as a connection is the EntityManagerFactory.

Configuring your EntityManagerFactory involves specificing the connection, and setting options. Once we’re done, you guessed it, we can create EntityManagers!

The call to createEntityManagerFactory takes the name of your “persistence unit”, it must match the name you put in your persistence.xml, so in this case it’s “comics”.

Here’s the EntityManagerFactory I created for the Comics example:

[java]
public abstract class ComicsEntityManagerFactory {

private static EntityManagerFactory emf = null;
private static Map properties = new HashMap();

private static void init() {
properties.put(PersistenceUnitProperties.TARGET_DATABASE, “Derby”);
properties.put(PersistenceUnitProperties.JDBC_DRIVER,
“org.apache.derby.jdbc.ClientDriver”);
properties.put(PersistenceUnitProperties.JDBC_URL,
“jdbc:derby://localhost:1527/sample;create=true”);
properties.put(PersistenceUnitProperties.JDBC_USER, “app”);
properties.put(PersistenceUnitProperties.JDBC_PASSWORD, “app”);
properties
.put(PersistenceUnitProperties.JDBC_READ_CONNECTIONS_MIN, “1″);
properties.put(PersistenceUnitProperties.JDBC_WRITE_CONNECTIONS_MIN,
“1″);

properties.put(PersistenceUnitProperties.BATCH_WRITING, “JDBC”);
properties.put(PersistenceUnitProperties.CLASSLOADER, ComicsEntityManagerFactory.class.getClassLoader());
properties.put(“eclipselink.logging.level”, “FINE”);
properties.put(“eclipselink.logging.timestamp”, “false”);
properties.put(“eclipselink.logging.session”, “false”);
properties.put(“eclipselink.logging.thread”, “false”);

emf = new PersistenceProvider().createEntityManagerFactory(“comics”,
properties);

}

/**
* Creates a new ComicsEntityManager object.
*
* @return the entity manager
*/
public static EntityManager createEntityManager() {
if (emf == null)
init();

return emf.createEntityManager();
}
}
[/java]

Models (EntityManager Usage)
Once we have an EntityManagerFactory we can use that EntityManagerFactory to create an EntityManager. An EntityManager has it’s own cache, handles all data access (selects/inserts/updates) and also can manage your transactions (commit/rollback).

I’ve found that I wrote the same code quite a bit: Obtain an EntityManager from my EntityManagerFactory, begin a transaction, commit a transaction, etc. Rather than write this same code over and over again I find it much easier to simply put this code in a base “Model” class.

I use two types of “Models”, one type is your standard Read Only model, I call this class BaseModel, it has some convience methods like selectAll and getNamedQueryResults. The next type of Model I call an “EditorModel” (Because I mostly use it in editors). It has transaction management methods as well as a method called isDirty which can tell me if I have any changes pending to go in the current transaction. This is very useful for editors and any other place you want to do read/write stuff.

I either use these two classes on their own or I extend them to put business specific methods in them — things like getAllEmployees(), etc.

Entities
An entity represents a persistent object in your database (usually a table or a view). In java terms they are POJO’s (Plain Old Java Objects). I usually add property change support to them for use with the JFace Databinding library, but that’s not required.

Example Entity (this one implements property change support, that’s why I’m extending BaseEntityObject) :

[java]
@Entity
public class Publisher extends BaseEntityObject implements Serializable {

@Id
@GeneratedValue
private int id;
private String name;

@OneToMany(mappedBy = “publisher”, cascade = CascadeType.PERSIST)
private List titles;</p> <p> /**<br /> * Instantiates a new publisher.<br /> */<br /> public Publisher() {<br /> }</p> <p> /**<br /> * Instantiates a new publisher.<br /> *<br /> * @param name the name<br /> */<br /> public Publisher(String name) {<br /> this.name = name;<br /> }</p> <p> /**<br /> * Gets the name.<br /> *<br /> * @return Returns the name.<br /> */<br /> public String getName() {<br /> return name;<br /> }</p> <p> /**<br /> * Sets the name.<br /> *<br /> * @param name The name to set.<br /> */<br /> public void setName(String name) {<br /> if (this.name != null || name != null)<br /> firePropertyChange(“name”, this.name, this.name = name);<br /> }</p> <p> /**<br /> * Gets the id.<br /> *<br /> * @return Returns the id.<br /> */<br /> public int getId() {<br /> return id;<br /> }</p> <p> /**<br /> * Sets the id.<br /> *<br /> * @param id the new id</p> <p> */<br /> public void setId(int id) {<br /> firePropertyChange(“id”, this.id, this.id = id);<br /> }</p> <p> /* (non-Javadoc)<br /> * @see java.lang.Object#toString()<br /> */<br /> @Override<br /> public String toString() {<br /> return getName();<br /> }</p> <p> /**<br /> * Gets the titles.<br /> *<br /> * @return the titles<br /> */<br /> public List<Title> getTitles() {<br /> return titles;<br /> }</p> <p> /**<br /> * Sets the titles.<br /> *<br /> * @param titles the new titles<br /> */<br /> public void setTitles(List<Title> titles) {<br /> if (this.titles != null || titles != null)<br /> firePropertyChange(“titles”, this.titles, this.titles = titles);<br /> }</p> <p>}<br /> [/java]</p> <p>Rememeber: Every entity defined in your model project must be referenced in your persistence.xml.</p> <p><strong>Generating Entities</strong><br /> The best way to generate your entities is with the <a href="http://www.eclipse.org/webtools/dali/main.php">Dali JPA Tools plugin</a>, it’s available on the standard eclipse update site. After you get Dali make sure you configure your drivers & connections for whatever platform your database uses – oracle,mysql, etc. </p> <p>You cannot just use the JPA Tools plugin on any ol’ project however. Though in the future this limitation will go away. First you must create a special “JPA Project” and immediately converting it to a plugin project. </p> <p>Then you can then generate your entities by right clicking <strong> on your project</strong> and selecting JPA Tools->Generate Entities.</p> <p><strong>Common Gotcha – sharing Entities</strong><br /> When we’re talking about OSGi, Entities can not pass the class loader boundry, so you cannot (at this time: September 2008) re-use entities between bundles. This just means the EntityManager you persist an entity with, must be in the same bundle. So I couldn’t take common entities and put them in their own bundle, then expect to persist/select to them with an EntityManager defined in another bundle.</p> <p>This isn’t as much of a deal breaker as it sounds at first, you just have to violate DRY for Entity Classes, which aren’t all that interesting in the first place. There’s nothing stopping you from defining common interfaces or Abstract classes that entities from multiple bundles share.</p> <h3>Selects/Inserts/Updates/Deletes</h3> <p>So how do you <em>do stuff</em> with EclipseLink? Turns out, it’s pretty simple. However there are so many different ways to do things, I don’t have the room here to go over it. Please read this <a href="http://wiki.eclipse.org/Developing_Applications_Using_EclipseLink_JPA_(ELUG)">excellent wiki article</a> to quickly get up to speed. Also any JPA Tutorial will get you caught up on the basics. I’d like to go over how all of this stuff pertains to your run of the mill RCP applications.</p> <h3>Editor Use Case</h3> <p>A common usage scenario with a database driven app is to use a FormEditor to modify a collection of entities. Thanks to EclipseLink we get lots of stuff for free, let’s take a look at an example editor class.</p> <p><strong>Editor Initialization</strong><br /> The init method, here we want to get whatever entities we want to set up our Model, remember our Model basically wraps our EntityManager and contains some convenience methods for dealing with transactions, etc. We need to obtain all of our entities from the entity manager, usually through a simple select query.</p> <p>[java]<br /> public void init(IEditorSite site, IEditorInput input)<br /> throws PartInitException {<br /> PublishersEditorInput myInput = (PublishersEditorInput) input;<br /> model = new PublisherEditorModel(myInput.getPublisher());<br /> publisher = model.getPublisher();</p> <p> setSite(site);<br /> setInput(input);<br /> }<br /> [/java]</p> <p>So we create a new PublisherEditorModel, which is a simple class I created that handles starting my transaction, then we get our Publisher entity from the model, let’s peak inside the PublisherEditorModel class, here we use call the find method on our entity manager, that method takes the class of our Entity and it’s primary key. </p> <p>[java]<br /> public Publisher getPublisher() {<br /> publisher = em.find(Publisher.class, publisher.getId());<br /> return publisher;<br /> }<br /> [/java]</p> <p>So now we’ve got our Publisher Entity, but it’s one we obtained from our EntityManager, that means any changes we make to the entity will be followed by the EntityManager. So if we changed a field, then called save on the EntityManager, an update statement would be sent to the database!</p> <p>You could of course skip the convention of a model class all together and deal with getting the EntityManager directly from your plugin’s EntityManagerFactory yourself, but it’s much easier to just write that code once.</p> <p><strong>Checking for changes</strong><br /> One feature of an editor is a dirty state — you change something, the editor is marked as dirty (A star is added to the editor title). If you save the changes, they go through, if not they’re discarded. By using EclipseLink we get this functionality for free. No matter how complicated our model is. In basically one line of code we take care of what used to be a gigantic chore. Now figuring out exactly what the differences are is a bit more complicated, but for our case this works great.</p> <p>[java]<br /> @Override<br /> public boolean isDirty() {</p> <p> UnitOfWork uow = ((EntityManagerImpl) model.getEntityManager).getUnitOfWork();<br /> return uow.hasChanges();<br /> }</p> <p>[/java]</p> <p><strong>Saving Changes</strong><br /> To save our changes we simply commit our transaction, then start a new one (so editing can continue). Once again, we haven’t had to write a single line of SQL. This simple commit will handle, updates, inserts, deletes! This step used to cause me many hours of grief for each new editor, troubleshooting what sort of SQL I had to generate, and in what order. Don’t get me wrong, sometimes EclipseLink doesn’t generate the SQL you think it should, but it’s usually fairly easy to debug what went wrong.</p> <p>[java]<br /> public void doSave(IProgressMonitor monitor) {<br /> model.getEntityManager().getTransaction().commit();<br /> model.getEntityManager().getTransaction().begin();<br /> firePropertyChange(PROP_DIRTY);<br /> }<br /> [/java]</p> <p>So, our entities we got from our entity manager we expose to our FormPages in the editor, we then bind those very entities to UI controls, either using JFace databinding or by hand — whichever way you prefer.</p> <p><strong>Review</strong><br /> That’s really all there is to tying a simple editor to a database. Let’s review:</p> <ol> <li>Obtain an EntityManager and begin a transaction</li> <li>Obtain all the entities you need from the EntityManager, either through the find method, a JPQL query or a Native SQL Query, or combination of these methods.</li> <li>Leverage EclipseLink’s UnitOfWork class in your isDirty method.</li> <li>In your form pages, bind Entities to UI controls.</li> <li>Commit your transaction when save is called.</li> </ol> <h3>Caching in a Thick Client</h3> <p>Traditionally one of the major benefits you get when using an ORM library and with EclipseLink especially is the ability to have a shared in memory cache. The benefits in a server side web application are immense, when we’re dealing with a client side thick application. Caching just gets in our way in most cases. The reason for this is obvious: In a web application EntityManagers across users sessions can all easily share the same cache, since they all reside on the same server (usually).</p> <p> However in a thick client each user is an island. When I make an update to the database, I update my very own Shared Cache, however Mary who is sitting 2 cubes over still has her own cache that’s oblivious to my changes. It’s imperative that she receive fresh data all the time!</p> <p><strong>Fresh data from a find call</strong><br /> Calling find on the EntityManager is the easiest way to get a handle on an Entity. However, you’re not gauranteed to hit the database on this call. After our find we just need to call refresh to refresh the Entity from the database. I created a method called findFresh that I put in my Base Model class, here’s how it looks:</p> <p>[java]<br /> public <T> T findFresh(Class<T> entityClass, Object primaryKey) {<br /> T result = getEntityManager().find(entityClass, primaryKey);<br /> if(result == null)<br /> return null;</p> <p> getEntityManager().refresh(result);<br /> return result;<br /> }<br /> [/java]</p> <p><strong>In EntityManager Setup</strong><br /> You can turn off the Shared Cache EntityManager wide, to stop regular JPQL queries from hitting the shared cache, this is called putting your EntityManager in “Isolated Mode”, just set it in the properties map you pass to the createEntityManagerFactory method.</p> <p>I just set the property like this:<br /> [java]<br /> properties.put(PersistenceUnitProperties.CACHE_SHARED_DEFAULT, “false”);<br /> [/java]</p> <p><strong>Fresh results from Queries</strong><br /> Just to be sure when I execute any Query – Native or otherwise I set the Query Hint to not use the cache, I created a little helper method I through in a util class like this:<br /> [java]<br /> public static void setNoCacheHints(Query q)<br /> {<br /> q.setHint(QueryHints.REFRESH, HintValues.TRUE);<br /> }<br /> [/java]</p> <p>When dealing with NamedQueries you can use the @CacheHint annotation to set the hint.</p> <h2>Conclusion</h2> <p>Before using EclipseLink in my business critical RCP applications, we were using all home grown DAO. We successfully ported our old applications to EclipseLink in a matter of months and that was using alpha code. Looking back all the developers agree we couldn’t live with out it. It’s amazing what the simplicity of being able to focus on your actual business logic and not SQL generation can do to you, coding is fun again. Thanks EclipseLink!</p> <div class="post_meta"> <p class="num_comments">19 Comments</p> <p class="tagged">Filed under <a href="http://www.weheartcode.com/category/eclipse/" title="View all posts in eclipse" rel="category tag">eclipse</a>, <a href="http://www.weheartcode.com/category/eclipselink/" title="View all posts in eclipselink" rel="category tag">eclipselink</a>, <a href="http://www.weheartcode.com/category/j2ee/" title="View all posts in j2ee" rel="category tag">j2ee</a>, <a href="http://www.weheartcode.com/category/java/" title="View all posts in java" rel="category tag">java</a>, <a href="http://www.weheartcode.com/category/jpa/" title="View all posts in jpa" rel="category tag">jpa</a></p> </div> </div> </div> <script type="text/javascript"><!-- google_ad_client = "pub-4095401497290165"; google_ad_width = 728; google_ad_height = 15; google_ad_format = "728x15_0ads_al_s"; //2007-09-09: Programming google_ad_channel = "4946657247"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "000000"; google_color_text = "CCCCCC"; google_color_url = "999999"; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <!-- You can start editing here. --> <div id="comments"> <h2 class="comment_head">19 Comments</h2> <ul class="comment_list"> <li class="alt" id="comment-9266"> <div class="comment_intro"> <span class="comment_author"><a href='http://java-persistence.blogspot.com' rel='external nofollow' class='url'>Doug Clarke</a></span><br /> <span class="comment_meta"><a href="#comment-9266" title="">August 27th, 2008 at 2:50 pm</a></span> </div> <div class="entry"> <p>Tim,</p> <p>One minor correction. EclipseLink is the full contribution of Oracle TopLink’s functionality. Going forward Oracle will continue to ship and support Oracle TopLink but it will include EclipseLink to deliver its functionality.</p> <p>Basically Oracle TopLink is a distribution of EclipseLink which customers wanting commercial support can choose.</p> <p>Doug</p> </div> </li> <li class="" id="comment-10064"> <div class="comment_intro"> <span class="comment_author">Cyril</span><br /> <span class="comment_meta"><a href="#comment-10064" title="">September 17th, 2008 at 5:43 am</a></span> </div> <div class="entry"> <p>Hi !<br /> I’ve tried to test your code in my Eclipse environemnt, but don’t succeded :-(<br /> Can you explain how to setup all your code please …<br /> Thanks !</p> </div> </li> <li class="alt" id="comment-11067"> <div class="comment_intro"> <span class="comment_author"><a href='http://blog.marcnuri.com' rel='external nofollow' class='url'>Marc Nuri</a></span><br /> <span class="comment_meta"><a href="#comment-11067" title="">September 25th, 2008 at 2:16 am</a></span> </div> <div class="entry"> <p>Very good and well explained tutorial.<br /> I found specially interesting the part on “Caching in a thick client”. Although this issue is very important for a J2SE application performance, its not well explained neither on toplink or eclipselink documentation/wiki.<br /> New users who use eclipseLink in j2se should take special concern with this. It’s also important if your database is accessed by to web application servers.</p> </div> </li> <li class="" id="comment-12975"> <div class="comment_intro"> <span class="comment_author"><a href='http://splitshade.wordpress.com/2008/11/24/eclipselink-persistence-fur-osgi/' rel='external nofollow' class='url'>EclipseLink - Persistence für OSGI « Just kidding..</a></span><br /> <span class="comment_meta"><a href="#comment-12975" title="">November 24th, 2008 at 6:11 pm</a></span> </div> <div class="entry"> <p>[...] [...]</p> </div> </li> <li class="alt" id="comment-13441"> <div class="comment_intro"> <span class="comment_author"><a href='http://www.sofastar.at' rel='external nofollow' class='url'>sofastar</a></span><br /> <span class="comment_meta"><a href="#comment-13441" title="">January 9th, 2009 at 12:59 pm</a></span> </div> <div class="entry"> <p>This tutorial helped me a lot with getting EclipseLink up and almost running in an RCP Application. Almost because of one little difference. In your example code you just added two dependencies:<br /> - javax.persistence<br /> - org.eclipse.persistence.jpa</p> <p>With this configuration everything was running, except it was not possible to use either @NamedQuery annotations or a Query (like: “select p from Person p”). Whenever these two things appeared somewhere in my code, a classDefNotFoundError was thrown…</p> <p>To solve the problem, I had to add another dependencie:<br /> - org.eclipse.persistence.antlr</p> <p>Now everything is working. This How-To was very helpful as a starting point!</p> </div> </li> <li class="" id="comment-13484"> <div class="comment_intro"> <span class="comment_author">cris</span><br /> <span class="comment_meta"><a href="#comment-13484" title="">January 17th, 2009 at 3:33 am</a></span> </div> <div class="entry"> <p>“This isn’t as much of a deal breaker as it sounds at first, you just have to violate DRY for Entity Classes, which aren’t all that interesting in the first place. There’s nothing stopping you from defining common interfaces or Abstract classes that entities from multiple bundles share.”</p> <p>Can you explain this in more detail ,maybe just a short example plz ?</p> <p>Thx a lot</p> </div> </li> <li class="alt" id="comment-33113"> <div class="comment_intro"> <span class="comment_author">Abdul Mujeeb</span><br /> <span class="comment_meta"><a href="#comment-33113" title="">July 19th, 2010 at 9:25 am</a></span> </div> <div class="entry"> <p>Hi bro, i have been trying to find an end to end tutorial thats gonna teach developing RCP applications , with persistance capabilities . But couldnt find one ….tried eclipse wiki , sample source codes. To me this blog of yours seem’s quiet a bit promising …. would you please elaborate this tutorial, Thanks in advance.</p> </div> </li> <li class="" id="comment-187028"> <div class="comment_intro"> <span class="comment_author">Marcelo</span><br /> <span class="comment_meta"><a href="#comment-187028" title="">July 9th, 2013 at 6:47 pm</a></span> </div> <div class="entry"> <p>Excelente, uno de los pocos post que he encontrado, y muy bueno..</p> </div> </li> <li class="alt" id="comment-197501"> <div class="comment_intro"> <span class="comment_author"><a href='http://black-lava-salt.blogspot.com/' rel='external nofollow' class='url'>Hawaiian Salt</a></span><br /> <span class="comment_meta"><a href="#comment-197501" title="">January 3rd, 2014 at 2:24 am</a></span> </div> <div class="entry"> <p>Hi there to all, how is the whole thing, I think every one is getting more from this<br /> website, and your views are good in favor of new people.</p> </div> </li> <li class="" id="comment-198460"> <div class="comment_intro"> <span class="comment_author"><a href='http://www.Facebook.com/kosanacondo' rel='external nofollow' class='url'>คอนโด</a></span><br /> <span class="comment_meta"><a href="#comment-198460" title="">January 13th, 2014 at 2:16 am</a></span> </div> <div class="entry"> <p>I’ve been exploring for a little bit for any high quality articles or weblog posts in<br /> this sort of house . Exploring in Yahoo I finally stumbled upon this website.<br /> Studying this information So i am satisfied to express<br /> that I have an incredibly good uncanny feeling I discovered just what I<br /> needed. I such a lot for sure will make sure to do not fail to<br /> remember this website and provides it a look on<br /> a continuing basis.</p> </div> </li> <li class="alt" id="comment-198615"> <div class="comment_intro"> <span class="comment_author"><a href='http://protricksgames.Wordpress.com/2014/01/13/trick-of-the-day-free-xbox-codes' rel='external nofollow' class='url'>xbox Code generator</a></span><br /> <span class="comment_meta"><a href="#comment-198615" title="">January 14th, 2014 at 12:58 pm</a></span> </div> <div class="entry"> <p>Write more, tbats all I have to say. Literally, it seems as though you relied on the vifeo to<br /> make your point. You obviously know what youre talking about,<br /> why throw away your intelligence on just posting videos to your site when<br /> you could be giving us something enlightening to read?</p> </div> </li> <li class="" id="comment-199052"> <div class="comment_intro"> <span class="comment_author"><a href='https://www.youtube.com/watch?v=lu4oPgkZdjc' rel='external nofollow' class='url'>Surgeon Simulator 2013 Download</a></span><br /> <span class="comment_meta"><a href="#comment-199052" title="">January 20th, 2014 at 12:18 pm</a></span> </div> <div class="entry"> <p>It’s a pity you don’t have a donate button! I’d definitely donate to<br /> this brilliant blog! I suppose for now i’ll settle for bookmarking and adding your RSS feed to my Google<br /> account. I look forward to new updates and will share this blog with my Facebook group.<br /> Chat soon!</p> </div> </li> <li class="alt" id="comment-200514"> <div class="comment_intro"> <span class="comment_author"><a href='http://www.youtube.com/watch?v=DGoKgaOA1tU' rel='external nofollow' class='url'>fique+FORTE.NET</a></span><br /> <span class="comment_meta"><a href="#comment-200514" title="">February 11th, 2014 at 3:51 pm</a></span> </div> <div class="entry"> <p>a venido a la puerta de vidrio ccon el que estaba familiarizado,<br /> para morir, la noche hab. • Make love 3 x weekly: Getting normal makinmg love<br /> is amongst the bestt ways to become pregnant.<br /> tratando con la obesidad y la gama de temas relaccionados con el sobrepeso como<br /> un mayor riesgo de problemas de colon y enfermedades card.</p> </div> </li> <li class="" id="comment-205289"> <div class="comment_intro"> <span class="comment_author"><a href='http://devconn.co/update/product-gamerstash/' rel='external nofollow' class='url'>sérial roller coaster tycoon 3</a></span><br /> <span class="comment_meta"><a href="#comment-205289" title="">March 16th, 2014 at 3:28 pm</a></span> </div> <div class="entry"> <p>Your way of describing all in this piece of writing is<br /> actually nice, every one be capable of simply understand it, Thanks a lot.</p> </div> </li> <li class="alt" id="comment-208946"> <div class="comment_intro"> <span class="comment_author"><a href='http://seodominationpro13.wix.com/longbeachseo' rel='external nofollow' class='url'>http://seodominationpro13.wix.com/longbeachseo</a></span><br /> <span class="comment_meta"><a href="#comment-208946" title="">March 29th, 2014 at 12:47 pm</a></span> </div> <div class="entry"> <p>This infrormation is priceless. When cann I find out<br /> more?</p> </div> </li> <li class="" id="comment-210207"> <div class="comment_intro"> <span class="comment_author"><a href='http://astonishinglimb66.tumblr.com' rel='external nofollow' class='url'>camo clothing</a></span><br /> <span class="comment_meta"><a href="#comment-210207" title="">April 3rd, 2014 at 11:39 am</a></span> </div> <div class="entry"> <p>Good way of telling, and fastidious piece of writing to obtaiin information concerning my<br /> presentation subject matter, which i am going to deliver in university.</p> </div> </li> <li class="alt" id="comment-211762"> <div class="comment_intro"> <span class="comment_author"><a href='http://youtu.be/dCTOFC7UtVI' rel='external nofollow' class='url'>Professional rug cleaning Portland</a></span><br /> <span class="comment_meta"><a href="#comment-211762" title="">April 11th, 2014 at 11:23 am</a></span> </div> <div class="entry"> <p>I’m truly enjoying the design and layout oof your site.<br /> It’s a very easy on the eyes which makes it much more enjoyable for me to come here and<br /> visit more often. Didd you hire out a developer to create your theme?<br /> Great work!</p> </div> </li> <li class="" id="comment-212714"> <div class="comment_intro"> <span class="comment_author"><a href='http://enigma900.blogspot.mx/2012/06/el-fantasma-del-cerro-la-ballena.html' rel='external nofollow' class='url'>Accommodation</a></span><br /> <span class="comment_meta"><a href="#comment-212714" title="">April 15th, 2014 at 3:28 pm</a></span> </div> <div class="entry"> <p>It’s amazing in support of me to have a website, which is good for my know-how.<br /> thanks admin</p> </div> </li> <li class="alt" id="comment-212810"> <div class="comment_intro"> <span class="comment_author"><a href='http://www.image-success.fr/rayban-pascher.php' rel='external nofollow' class='url'>ray ban pas cher</a></span><br /> <span class="comment_meta"><a href="#comment-212810" title="">April 16th, 2014 at 1:05 am</a></span> </div> <div class="entry"> <p>It ‘really impossible to show all models Hogan Shoes Spring Summer Collection 2012 with all colors available, but the ten photo of the models found in the many more photos of Hogan Interactive spring summer 201 xboter 2014</p> </div> </li> </ul> <h2 class="form_head">Leave a Reply</h2> <form action="http://www.weheartcode.com/wp-comments-post.php" method="post" id="comment_form"> <p><input type="text" class="text_input" name="author" id="author" value="" tabindex="1" /><label for="author">Name (required)</label></p> <p><input type="text" class="text_input" name="email" id="email" value="" tabindex="2" /><label for="email">Mail (will not be published) (required)</label></p> <p><input type="text" class="text_input" name="url" id="url" value="" tabindex="3" /><label for="url">Website</label></p> <!--<p><small><strong>XHTML:</strong> You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> </small></p>--> <p><textarea class="text_area" name="comment" id="comment" rows="10" tabindex="4"></textarea></p> <p> <input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" /> <input type="hidden" name="comment_post_ID" value="44" /> </p> <p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="bee0a82880" /></p> </form> </div> </div> <div id="sidebar"> <ul> <li> <h2>Search</h2> <div class="sidebar_section"> <form method="get" id="search_form" action="http://www.weheartcode.com/"> <p style="margin-bottom: 5px;"><input type="text" class="text_input" value="" name="s" id="s" /></p> <p style="margin-bottom: 0;"><input type="submit" id="searchsubmit" value="Search" /></p> </form> </div> </li> <li> <h2>Feed</h2> <div class="sidebar_section"> <p class="center"><a href="http://www.weheartcode.com/feed/"><img class="off" src="http://www.weheartcode.com/wp-content/themes/PressRow/images/icon_feed.gif" width="32" height="32" alt="Grab this site's feed!" /></a></p> <p class="center"><a href="http://www.weheartcode.com/feed/">Subscribe to this site!</a></p> </div> </li> <li> <div class="sidebar_section"> <script type="text/javascript"><!-- google_ad_client = "ca-pub-4095401497290165"; /* Sidebar */ google_ad_slot = "2404112650"; google_ad_width = 160; google_ad_height = 600; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> <div class="sidebar_section"> <li id="recent-posts-2" class="widget widget_recent_entries"> <h2 class="widgettitle">Recent Posts</h2> <ul> <li> <a href="http://www.weheartcode.com/2010/01/16/oracle-delete-taking-a-long-time/" title="Oracle Delete Taking a Long Time">Oracle Delete Taking a Long Time</a> </li> <li> <a href="http://www.weheartcode.com/2009/10/06/luhn-digit-generation-oracle-plsql-implementation/" title="Luhn Digit Generation Oracle PL/SQL Implementation">Luhn Digit Generation Oracle PL/SQL Implementation</a> </li> <li> <a href="http://www.weheartcode.com/2009/05/13/capturing-uncaught-java-exceptions-in-a-bash-shell-script/" title="Capturing Uncaught Java Exceptions in a Bash Shell Script">Capturing Uncaught Java Exceptions in a Bash Shell Script</a> </li> <li> <a href="http://www.weheartcode.com/2009/02/19/mylyn-trac-wsgi/" title="Mylyn + Trac + wsgi">Mylyn + Trac + wsgi</a> </li> <li> <a href="http://www.weheartcode.com/2009/01/21/easily-creating-fixed-length-flat-files-with-groovy/" title="Easily Creating Fixed Length Flat Files With Groovy">Easily Creating Fixed Length Flat Files With Groovy</a> </li> <li> <a href="http://www.weheartcode.com/2009/01/14/writing-portable-groovy-scripts-with-a-magic-runnable-jar/" title="Writing Portable Groovy Scripts with A Magic Runnable Jar">Writing Portable Groovy Scripts with A Magic Runnable Jar</a> </li> <li> <a href="http://www.weheartcode.com/2008/12/29/regular-expression-to-replace-systemoutprintln-with-log4j/" title="Regular Expression to Replace System.out.println with Log4j">Regular Expression to Replace System.out.println with Log4j</a> </li> <li> <a href="http://www.weheartcode.com/2008/10/16/reusing-annotation-based-controllers-in-spring-mvc/" title="Reusing Annotation Based Controllers in Spring MVC">Reusing Annotation Based Controllers in Spring MVC</a> </li> <li> <a href="http://www.weheartcode.com/2008/08/27/eclipselink-in-j2se-rcp-applications/" title="Eclipselink in J2SE RCP Applications">Eclipselink in J2SE RCP Applications</a> </li> <li> <a href="http://www.weheartcode.com/2008/04/29/easily-add-propertychangesupport-to-beans-in-eclipse/" title="Easily Add PropertyChangeSupport to Beans in Eclipse">Easily Add PropertyChangeSupport to Beans in Eclipse</a> </li> </ul> </li> <li id="archives-2" class="widget widget_archive"><h2 class="widgettitle">Archives</h2> <ul> <li><a href='http://www.weheartcode.com/2010/01/' title='January 2010'>January 2010</a></li> <li><a href='http://www.weheartcode.com/2009/10/' title='October 2009'>October 2009</a></li> <li><a href='http://www.weheartcode.com/2009/05/' title='May 2009'>May 2009</a></li> <li><a href='http://www.weheartcode.com/2009/02/' title='February 2009'>February 2009</a></li> <li><a href='http://www.weheartcode.com/2009/01/' title='January 2009'>January 2009</a></li> <li><a href='http://www.weheartcode.com/2008/12/' title='December 2008'>December 2008</a></li> <li><a href='http://www.weheartcode.com/2008/10/' title='October 2008'>October 2008</a></li> <li><a href='http://www.weheartcode.com/2008/08/' title='August 2008'>August 2008</a></li> <li><a href='http://www.weheartcode.com/2008/04/' title='April 2008'>April 2008</a></li> <li><a href='http://www.weheartcode.com/2008/02/' title='February 2008'>February 2008</a></li> <li><a href='http://www.weheartcode.com/2008/01/' title='January 2008'>January 2008</a></li> <li><a href='http://www.weheartcode.com/2007/10/' title='October 2007'>October 2007</a></li> <li><a href='http://www.weheartcode.com/2007/09/' title='September 2007'>September 2007</a></li> <li><a href='http://www.weheartcode.com/2007/07/' title='July 2007'>July 2007</a></li> <li><a href='http://www.weheartcode.com/2007/06/' title='June 2007'>June 2007</a></li> <li><a href='http://www.weheartcode.com/2007/05/' title='May 2007'>May 2007</a></li> <li><a href='http://www.weheartcode.com/2007/04/' title='April 2007'>April 2007</a></li> <li><a href='http://www.weheartcode.com/2007/03/' title='March 2007'>March 2007</a></li> <li><a href='http://www.weheartcode.com/2006/12/' title='December 2006'>December 2006</a></li> <li><a href='http://www.weheartcode.com/2006/11/' title='November 2006'>November 2006</a></li> <li><a href='http://www.weheartcode.com/2006/10/' title='October 2006'>October 2006</a></li> </ul> </li> <li id="linkcat-37" class="widget widget_links"><h2 class="widgettitle">We Heart</h2> <ul class='xoxo blogroll'> <li><a href="http://www.google.com/codesearch/advanced_code_search">Google Code Search</a></li> <li><a href="http://labs.oreilly.com/code/" title="Search Inside O’Reilly Books">O’Reilly Code Search</a></li> <li><a href="http://thedailywtf.com/" title="Don’t end up here">The Daily WTF</a></li> </ul> </li> </div> </div> <div id="footer"> <p>© 2006 We Heart Code. Hosted By , $10 off any hosting plan, enter promo-code WEHEART</p> </div> </div> </div> <script type="text/javascript"><!-- google_ad_client = "pub-4095401497290165"; google_ad_width = 728; google_ad_height = 15; google_ad_format = "728x15_0ads_al_s"; //2007-09-09: Programming google_ad_channel = "4946657247"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "000000"; google_color_text = "CCCCCC"; google_color_url = "999999"; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>