Project of the Month, November 2005

By Community Team

NHibernate Logo

Project leaders:

Name: Sergei Koshcheyev
Age: 21
Occupation or experience: Full-time NHibernate developer
Education: M.S. in Computer Science (Charles University in Prague, Czech Republic)
Location: Prague, Czech Republic

Name: Mike Doerfler
Age: 30
Occupation or experience: Software developer for past eight years.
Education: BS in Industrial Engineering
Location: Kansas City, Mo., USA

Key developers

Peter Smulovics
Pierre Henri Kuaté

In addition, Paul Hatcher, Demetris Manikas, Donald Mull, and Kevin Williams contributed significantly to the project at some point of time. There may also be others that I forgot.

Quote about SourceForge.net?

‘Use the Forge, Luke!’

Why did you place the project on SourceForge.net?

It is _the_ place for open source projects, isn’t it? 🙂

How has SourceForge.net helped you?

SourceForge provides CVS and mailing list services for our developers, and Web hosting for our user forum. Without the infrastructure for the project, we would be still be in a ‘garage’ phase. The way the project Web sites are made drives you to put more and more information on it, like screenshots and tracker items for milestones. Sourceforge is also very popular, and this helped attract more people, including developers, to NHibernate. And the SF team has been responsive to any help requests we’ve put in.

The number one benefit of using SourceForge.net is:

Well-known, popular, and time-proven project hosting services with free professional CVS system.

Description of project

NHibernate is a port of the excellent Java Hibernate relational persistence tool to the .Net platform. Hibernate is the leading solution for object-relational mapping (ORM) and object persistence in general for the Java platform. The NHibernate object persistence library for relational databases is almost 100% feature-compatible with Hibernate 2.1. What makes NHibernate and Hibernate both unique is their approach to persistence, where your objects are not required to inherit from a special base class or implement an interface, (N)Hibernate works with plain old Java/CLR objects. Hibernate is also very flexible — you can define how to persist individual properties and associations, query the database using a very concise and powerful query language, and so on.

Trove info

  • Database Environment: Project is a relational object mapper
  • Development Status: 5 – Production/Stable
  • Intended Audience: Developers
  • License: GNU Library or Lesser General Public License (LGPL)
  • Operating System: All 32-bit Microsoft Windows (95/98/NT/2000/XP), OS independent (written in an interpreted language)
  • Programming Language: C#, Visual Basic .Net
  • Topic: Database, Software Development
  • Translations: English
  • User Interface: .Net/Mono, Win32 (Microsoft Windows)

Why and how did you get started?

Sergey: The project had quite an up-and-down history. It was started, then abandoned, then resurrected again. I joined the project because I was familiar with Java Hibernate, and was looking for a similar solution on the .Net platform. I found NHibernate and started using it. A few weeks later I found I needed to add a few features to NHibernate for my own work, so I submitted a patch. Gradually I became more and more involved with the project.

Mike: I used Hibernate on a small project and saw the productivity benefits to be gained from a good ORM. I’m primarily a Microsoft technology developer so I was looking for ORMs written for .Net and stumbled across the NHibernate sourceforge project. It was dead at the time I found it but I was able to get ahold of the old admin and get myself added as an admin.

Peter: For me what was important is to have a good ORM tool on the .Net world, and it was obvious that it should be based on some industry-wide accepted project. I looked at the OJB.Net project, but I found that the model they used to remodel the Java project was still Java-like — they didn’t used any of the .Net features at all. Later I found the nearly abandoned project NHibernate project, which was resurrected by the tremendous work of Mike Doerfler, and was led to a quality bearer .Net style project.

Pierre Henri: Two years ago, I was looking for an elegant approach for creating .Net enterprise applications. I first used NHibernate in commercial software and started contributing on the forum. I finally decide to work on it in my spare time.

What is the software’s intended audience?

Developers writing enterprise applications for the .Net platform, with a complex domain model. People who need a good ORM tool, and people who don’t know what an ORM is yet. .Net developers who want to maintain domain model-centric applications backed by an RDBMS.

How many people do you believe are using your software?

Many thousands have already tried one of the betas of it, so likely on the order of a few hundred teams.

What are a couple of notable examples of how people are using your software?

We are conducting a survey on this topic right now. Example projects: Codus, Spring.Net, Cuyahoga CMS, and many commercial Web sites.

What gave you an indication that your project was becoming successful?

The sheer volume of discussions in the forums. Also we began seeing it discussed on other forums, and other ORM vendors began to compare themselves to NHibernate. And just now, when I searched Google for “NHibernate,” I found a competitor’s paid advertisement on the results page.

What has been your biggest surprise?

Peter: The lively atmosphere of our forums.

Mike: How much time it takes to provide support.

What has been your biggest challenge?

Sergey: The biggest challenge for me was getting out the 1.0 release. To make a successful release you have to, at one point in time, say to yourself, “No new features, let’s just fix all the bugs there are and release it already.”

Peter: The Proxy part, but thank to the Castle:DynamicProxy project, this was solved.

Pierre Henri: Helping people in the forums. There are more and more persons asking for help and they sometimes have very complex problems.

Why do you think your project has been so well received?

NHibernate was initially well received because of how well received Hibernate has been. Another factor is that while NHibernate is a port of a Java library, the team tried hard to make the interface follow .Net naming conventions, so that when using NHibernate you really are using a native .Net library, not programming Java-in-.Net. Microsoft has pushed DataSet as the ultimate choice for solution developers, but it doesn’t fit in every case and can be hard to maintain and use in complex environments.

Where do you see your project going?

Sergey: There are lots of possibilites — porting Hibernate3, adding .Net-specific features, improving the documentation and creating sample applications to make NHibernate easier to understand and use.

Peter: Sooner or later the project should move along being .Net2 compatible and/or Hibernate 3.1 compatible. Which will come first depends on the users and our effort

What’s on your project wish list?

Peter: Contributional help in areas such as documentation and testing.

Mike: Getting NHibernate ready for .Net 2.0.

Sergey: I wish for a CruiseControl.Net server that would provide continuous integration for NHibernate and would run its tests with as many different databases as possible.

Pierre Henri: More RAD tools.

What are you most proud of?

I’m proud that we made it to 1.0, and that we have a community of happy users and supporters. NHibernate is very well received among .Net developers.

Pierre Henri: The information about the mapping of classes to database tables is provided to NHibernate through XML files, which can be verbose and annoying to maintain. NHibernate.Mapping.Attributes is a contribution that makes it possible to get this information by decorating classes and their members with .Net attributes.

If you could change something about the project, what would it be?

We would have more time for it. 🙂

How do you coordinate the project?

We usually discuss issues through instant messaging, or through the developer mailing list. We use forums, Jira for bug tracking and assignment, and Confluence as a wiki. We also apply the Test-Driven Development methodologies.

Do you work on the project full-time, or do you have another job?

Only Sergey works on NHibernate full-time, funded by JBoss Inc., the company that also employs developers from the original Hibernate team.

If you work on the project part-time, how much time would you say you spend, per week, on it?

Peter: Less than I want 🙂 Now I spend 2-3 hours with it, but last year there were weeks spent only on the project itself.

Mike: Initially I was probably around 25-35 hours a week, but have fallen back to about 5 hours a week lately.

Pierre Henri: It varies through the year; the average might be around 10 hours per weeks.

What is your development environment like?

Sergey: I work in a Microsoft environment, which means Visual Studio .Net 2003, SQL Server 2000 (MSDE), and the amazing TestDriven.Net add-in for Visual Studio. I also use open source tools such as NAnt and NDoc to build releases. As for the machine, I’m using a quite powerful Dell Latitude notebook right now.

Peter: I use a laptop with 512MB RAM, running Windows XP, VS 2002, VS 2003 and some early beta of VS 2005.

Mike: Windows XP, Windows Server 2003, VS.Net 2003

Pierre Henri: AMD Duron 2100+, Windows Server 2003, VS.Net 2003, SQL Server 2000

Milestones:

Project started — February 2003
NHibernate 0.3 — first alpha — September 2004
NHibernate 0.6 — first beta — January 2005
NHibernate 1.0 — October 10, 2005

Future plan is to release the .Net2 and/or Hibernate 3.1 compatible version as soon as possible and as bug-free as possible, and port Hibernate 3.

How can others contribute?

We’re just like any other open source project. We can use any form of participation — helping with the forum, working with documentation, creating patches, managing the build farm and the builds, writing more test code and sample applications. You can find a complete answer by reading topics on our forum.