Sunday, 21 April 2013

Managing Configuration and ISessionFactory Access with TinyNH, the Simple NHibernate Infrastructure

TinyNH is a demo project and series of articles designed to help you get your project up and running with a simple solid NHibernate persistence infrastructure. See contents for a full list of articles.

Introduction

So far, we've created some domain model entity classes and added a ConfigurationBuilder class to configure NHibernate.

To start working with your objects, you first need to create your Configuration, then use it to build an ISessionFactory. In a really simple application, like the TinyNH ProductImporter console application, a couple of lines of code is sufficient:

Look at ProductImporter/Program.cs on github if you can't see the code in-line above.

However, there are a number of important points to consider if you are using NHibernate in the context of a web application or any other long-running service:
  • Configuration and ISessionFactory instances are expensive to create and should only be created once during the lifetime of your application.
  • We need to ensure that Configuration and ISessionFactory initialisation happens only once and in a thread-safe manner, even in a multi-threaded environment such as a web application.
  • Initialisation can fail due to database outages. Specifically Configuration.BuildSessionFactory will fail if the application cannot connect to the database. Do you want your web site to become unavailable, just because the database happened to be down for a couple of seconds, coinciding with when your application started up? 

The TinyNH ConfigurationStore is designed to take care of the above concerns.

Here it is:

Look at ConfigurationStore.cs on github if you can't see the code in-line above.

ThreadSafeInitializer is a utility class that is used to initialise the Configuration and ISessionFactory in a thread-safe manner. It is similar to System.Lazy but it will retry initialisation if a previous attempt fails - see my article about System.Lazy's exception caching features for background.

How to do it

If you need it, add this functionality to your solution as follows:

  1. Add the ConfigurationStore.cs class to your solution, within the same namespace as the ConfigurationBuilder class described in the previous article.
  2. Add ThreadSafeInitializer.cs to a suitable location in your solution. You may have a "slot" used for common utility classes or you could add it to the same namespace as ConfigurationStore.
  3. Add some code that runs during start-up of your application to initialise your ConfigurationStore.

In our example web application (TinyNH.DemoStore.Admin project) we do this in Global.asax. In keeping with our super-simple approach, we make the ConfigurationStore available as a public property of our Global application class.

Look at Global.asax.cs on github if you can't see the code in-line above.

You might shudder at the thought of accessing dependencies via static properties and prefer to use an IoC container to manage dependencies between objects. The ConfigurationStore is still a useful mechanism to ensure thread-safe initialisation of your Configuration / ISessionFactory during application start-up and can be used to provide the instances to your IoC container.

3 comments:

  1. đồng tâm
    game mu
    cho thuê nhà trọ
    cho thuê phòng trọ
    nhac san cuc manh
    số điện thoại tư vấn pháp luật miễn phí
    văn phòng luật
    tổng đài tư vấn pháp luật
    dịch vụ thành lập công ty trọn gói
    64 nước cờ trên bàn thương lượng ebook
    mbp là gì
    thuyết erg
    các nghịch lý nổi tiếng
    chi square test là gì
    nghệ thuật nói chuyện trước công chúng dale carnegie
    định lý coase
    học thuyết kỳ vọng của victor vroom
    chiến thắng con quỷ trong bạn audio
    điểm cân bằng nash

    - Tô Nam và Chiết Bắc đầu đuôi liền nhau, đây vốn là nơi có kinh tế phát triển, liên hệ cũng không phải chuyện xấu. Đỗ Tử Hoa vốn cũng có quan hệ làm ăn với bọn họ, lần này nghe bọn họ cũng tới liền liên hệ giúp chúng ta.

    Triệu Quốc Đống biết nếu nói chuyện công việc thì Cù Vận Bạch sẽ rất chú ý, một phụ nữ điển hình vì công việc. Chẳng qua tính cách của cô không ảnh hưởng tới cách ăn mặc. Cô ăn mặc rất đẹp.

    - Chúng ta phải đi gặp chứ. Bây giờ các lãnh đạo đã về nên chỉ có mấy người chúng ta mà thôi.
    Cù Vận Bạch thở dài một tiếng rồi nói:
    - Đến bây giờ chưa có công ty nào xác thực sẽ xây dựng nhà máy ở khu Khai Phát, đều chờ kết quả liên doanh. Chúng ta có phải ngồi nhìn trời không?

    - Cù tỷ, chúng ta phải làm tốt công tác từ trước, thủ tục liên doanh tôi nghĩ có lẽ sắp xong, chỉ là tranh chấp vài chi tiết mà thôi.

    Thực ra tối qua Thái Chánh Dương đã gọi cho Triệu Quốc Đống. Tô Giác Hoa và Ninh Pháp đều ủng hộ Tỉnh ủy, Ủy ban nhân dân tỉnh đưa ra chính sách ưu đãi, cổ vũ Công ty liên doanh có mục tiêu một năm sản xuất hai triệu xe, hơn nữa nghe nói tỷ lệ liên doanh đã được xác định. Có lẽ vấn đề đàm phán tỷ lệ nội địa hóa trong hai ngày nữa sẽ rõ ràng. Điều này có nghĩa Công ty liên doanh An Đô – Daewoo sắp được công bố thành lập.

    Cù Vận Bạch thấy lời của Triệu Quốc Đống không bình thường nên khó hiểu hỏi:
    - Sao cậu biết liên doanh nhất định thành công? Ngay cả Bí thư Lô cũng không dám xác định mà.

    - Ha ha, Cù tỷ tôi có con đường bí mật mà, chị có hứng thú sao?
    Lời này của Triệu Quốc Đống có chút mập mờ nhưng Cù Vận Bạch lại không phát hiện ra:
    - Con đường bí mật gì chứ? Nói mau.

    - Tôi có một người bạn trên tỉnh biết được cuộc đàm phán đã đến gian đoạn cuối, chỉ là còn vài chi tiết chưa xong nhưng không ảnh hưởng tới việc liên doanh. Tôi đoán trong Hội chợ thương mại sẽ công bố.

    ReplyDelete
  2. Enjoyed your approach to explaining how it works, hope to see more blog posts from you. thank you!

    Hibernate Online Training | Java Online Training


    Hibernate Training in Chennai Java Training in Chennai

    ReplyDelete
  3. Enjoyed your approach to explaining how it works, hope to see more blog posts from you. thank you!

    Hibernate Online Training | Java Online Training


    Hibernate Training in Chennai Java Training in Chennai

    ReplyDelete