Skip to content

Commit 523bf28

Browse files
Fix #7 - previous version inclusion.
1 parent 47b6b9c commit 523bf28

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+37586
-0
lines changed

doc/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@
77
<li><a href="/doc/nhibernate-features.html">NHibernate Features</a></li>
88
<li><a href="/doc/tutorials/first-nh-app/your-first-nhibernate-based-application.html">Tutorial: Your first NHibernate based application</a></li>
99
</ul>
10+
11+
<h2>Previous Reference</h2>
12+
<ul>
13+
<li>
14+
<a href="/previous-doc/v4.1/ref/index.html">The NHibernate Reference, v4.1</a>
15+
(<a href="/previous-doc/v4.1/ref/index.html">HTML</a>,
16+
<a href="/previous-doc/v4.1/single/index.html">single page HTML</a>)
17+
</li>
18+
<li><a href="/previous-doc/v3.3/single/index.html">The NHibernate Reference, v3.3</a></li>
19+
<li><a href="/previous-doc/v2.1/single/index.html">The NHibernate Reference, v2.1</a></li>
20+
</ul>
21+
1022
<h2>Patterns &amp; Practices</h2>
1123
<ul>
1224
<li><a href="/doc/patternsandpractices/identity-field-equality-and-hash-code.html">Identity Field, Equality and Hash Code</a></li>

previous-doc/v2.1/shared/css/html.css

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
A {
2+
color: #003399;
3+
}
4+
5+
A:active {
6+
color: #003399;
7+
}
8+
9+
A:visited {
10+
color: #888888;
11+
}
12+
13+
P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
14+
color: #000000;
15+
}
16+
17+
TD, TH, SPAN {
18+
color: #000000;
19+
}
20+
21+
BLOCKQUOTE {
22+
margin-right: 0px;
23+
}
24+
25+
26+
H1, H2, H3, H4, H5, H6 {
27+
color: #000000;
28+
font-weight:500;
29+
margin-top:10px;
30+
padding-top:15px;
31+
}
32+
33+
TABLE {
34+
border-collapse: collapse;
35+
border-spacing:0;
36+
border: 1px thin black;
37+
empty-cells: hide;
38+
}
39+
40+
TD {
41+
padding: 4pt;
42+
}
43+
44+
H1 { font-size: 150%; }
45+
H2 { font-size: 140%; }
46+
H3 { font-size: 110%; font-weight: bold; }
47+
H4 { font-size: 110%; font-weight: bold;}
48+
H5 { font-size: 100%; font-style: italic; }
49+
H6 { font-size: 100%; font-style: italic; }
50+
51+
TT {
52+
font-size: 90%;
53+
font-family: "Courier New", Courier, monospace;
54+
color: #000000;
55+
}
56+
57+
PRE {
58+
font-size: 100%;
59+
padding: 5px;
60+
border-style: solid;
61+
border-width: 1px;
62+
border-color: #CCCCCC;
63+
background-color: #F4F4F4;
64+
}
65+
66+
UL, OL, LI {
67+
list-style: disc;
68+
}
69+
70+
HR {
71+
width: 100%;
72+
height: 1px;
73+
background-color: #CCCCCC;
74+
border-width: 0px;
75+
padding: 0px;
76+
color: #CCCCCC;
77+
}
78+
79+
.variablelist {
80+
padding-top: 10;
81+
padding-bottom:10;
82+
margin:0;
83+
}
84+
85+
.itemizedlist, UL {
86+
padding-top: 0;
87+
padding-bottom:0;
88+
margin:0;
89+
}
90+
91+
.term {
92+
font-weight:bold;
93+
}
94+
95+
96+
97+
16.9 KB
Loading
Loading
Loading
5.49 KB
Loading
44 KB
Loading
33.6 KB
Loading
Loading
21.1 KB
Loading

previous-doc/v2.1/single/index.html

Lines changed: 8863 additions & 0 deletions
Large diffs are not rendered by default.

previous-doc/v3.3/shared/css/html.css

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
A {
2+
color: #003399;
3+
}
4+
5+
A:active {
6+
color: #003399;
7+
}
8+
9+
A:visited {
10+
color: #888888;
11+
}
12+
13+
P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
14+
color: #000000;
15+
}
16+
17+
TD, TH, SPAN {
18+
color: #000000;
19+
}
20+
21+
BLOCKQUOTE {
22+
margin-right: 0px;
23+
}
24+
25+
26+
H1, H2, H3, H4, H5, H6 {
27+
color: #000000;
28+
font-weight:500;
29+
margin-top:10px;
30+
padding-top:15px;
31+
}
32+
33+
TABLE {
34+
border-collapse: collapse;
35+
border-spacing:0;
36+
border: 1px thin black;
37+
empty-cells: hide;
38+
}
39+
40+
TD {
41+
padding: 4pt;
42+
}
43+
44+
H1 { font-size: 150%; }
45+
H2 { font-size: 140%; }
46+
H3 { font-size: 110%; font-weight: bold; }
47+
H4 { font-size: 110%; font-weight: bold;}
48+
H5 { font-size: 100%; font-style: italic; }
49+
H6 { font-size: 100%; font-style: italic; }
50+
51+
TT {
52+
font-size: 90%;
53+
font-family: "Courier New", Courier, monospace;
54+
color: #000000;
55+
}
56+
57+
PRE {
58+
font-size: 100%;
59+
padding: 5px;
60+
border-style: solid;
61+
border-width: 1px;
62+
border-color: #CCCCCC;
63+
background-color: #F4F4F4;
64+
}
65+
66+
UL, OL, LI {
67+
list-style: disc;
68+
}
69+
70+
HR {
71+
width: 100%;
72+
height: 1px;
73+
background-color: #CCCCCC;
74+
border-width: 0px;
75+
padding: 0px;
76+
color: #CCCCCC;
77+
}
78+
79+
.variablelist {
80+
padding-top: 10;
81+
padding-bottom:10;
82+
margin:0;
83+
}
84+
85+
.itemizedlist, UL {
86+
padding-top: 0;
87+
padding-bottom:0;
88+
margin:0;
89+
}
90+
91+
.term {
92+
font-weight:bold;
93+
}
94+
95+
96+
97+
16.9 KB
Loading
Loading
Loading
5.49 KB
Loading
44 KB
Loading
33.6 KB
Loading
Loading
21.1 KB
Loading

previous-doc/v3.3/single/index.html

Lines changed: 9300 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
---
2+
layout:
3+
---
4+
<html><head>
5+
<meta charset="utf-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1" />
7+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
8+
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
9+
<link rel="canonical" href="http://nhibernate.info/doc/nhibernate-reference/architecture.html" />
10+
<title>Chapter&nbsp;2.&nbsp;Architecture</title><link rel="stylesheet" href="../shared/css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.65.1"><link rel="home" href="index.html" title="NHibernate - Relational Persistence for Idiomatic .NET"><link rel="up" href="index.html" title="NHibernate - Relational Persistence for Idiomatic .NET"><link rel="previous" href="quickstart.html" title="Chapter&nbsp;1.&nbsp;Quickstart with IIS and Microsoft SQL Server"><link rel="next" href="session-configuration.html" title="Chapter&nbsp;3.&nbsp;ISessionFactory Configuration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;2.&nbsp;Architecture</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="quickstart.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="session-configuration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="architecture"></a>Chapter&nbsp;2.&nbsp;Architecture</h2></div></div><div></div></div>{% include google_adsense.html %}<div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="architecture-overview"></a>2.1.&nbsp;Overview</h2></div></div><div></div></div><p>
11+
A (very) high-level view of the NHibernate architecture:
12+
</p><div class="mediaobject" align="center"><img src="../shared/images/overview.png" align="middle"></div><p>
13+
This diagram shows NHibernate using the database and configuration data to
14+
provide persistence services (and persistent objects) to the application.
15+
</p><p>
16+
We would like to show a more detailed view of the runtime architecture.
17+
Unfortunately, NHibernate is flexible and supports several approaches. We will
18+
show the two extremes. The "lite" architecture has the application
19+
provide its own ADO.NET connections and manage its own transactions. This approach
20+
uses a minimal subset of NHibernate's APIs:
21+
</p><div class="mediaobject" align="center"><img src="../shared/images/lite.png" align="middle"></div><p>
22+
The "full cream" architecture abstracts the application away from the
23+
underlying ADO.NET APIs and lets NHibernate take care of the details.
24+
</p><div class="mediaobject" align="center"><img src="../shared/images/fullcream.png" align="middle"></div><p>
25+
Heres some definitions of the objects in the diagrams:
26+
27+
</p><div class="variablelist"><dl><dt><span class="term">ISessionFactory (<tt class="literal">NHibernate.ISessionFactory</tt>)</span></dt><dd><p>
28+
A threadsafe (immutable) cache of compiled mappings for a single database.
29+
A factory for <tt class="literal">ISession</tt> and a client of
30+
<tt class="literal">IConnectionProvider</tt>. Might hold an optional (second-level)
31+
cache of data that is reusable between transactions, at a
32+
process- or cluster-level.
33+
</p></dd><dt><span class="term">ISession (<tt class="literal">NHibernate.ISession</tt>)</span></dt><dd><p>
34+
A single-threaded, short-lived object representing a conversation between
35+
the application and the persistent store. Wraps an ADO.NET connection. Factory
36+
for <tt class="literal">ITransaction</tt>. Holds a mandatory (first-level) cache
37+
of persistent objects, used when navigating the object graph or looking up
38+
objects by identifier.
39+
</p></dd><dt><span class="term">Persistent Objects and Collections</span></dt><dd><p>
40+
Short-lived, single threaded objects containing persistent state and business
41+
function. These might be ordinary POCOs, the only special thing about
42+
them is that they are currently associated with (exactly one)
43+
<tt class="literal">ISession</tt>. As soon as the <tt class="literal">Session</tt> is closed,
44+
they will be detached and free to use in any application layer (e.g. directly
45+
as data transfer objects to and from presentation).
46+
</p></dd><dt><span class="term">Transient Objects and Collections</span></dt><dd><p>
47+
Instances of persistent classes that are not currently associated with a
48+
<tt class="literal">ISession</tt>. They may have been instantiated by
49+
the application and not (yet) persisted or they may have been instantiated by a
50+
closed <tt class="literal">ISession</tt>.
51+
</p></dd><dt><span class="term">ITransaction (<tt class="literal">NHibernate.ITransaction</tt>)</span></dt><dd><p>
52+
(Optional) A single-threaded, short-lived object used by the application to
53+
specify atomic units of work. Abstracts application from underlying ADO.NET
54+
transaction. An <tt class="literal">ISession</tt> might span several
55+
<tt class="literal">ITransaction</tt>s in some cases.
56+
</p></dd><dt><span class="term">IConnectionProvider (<tt class="literal">NHibernate.Connection.IConnectionProvider</tt>)</span></dt><dd><p>
57+
(Optional) A factory for ADO.NET connections and commands. Abstracts application
58+
from the concrete vendor-specific implementations of <tt class="literal">IDbConnection</tt>
59+
and <tt class="literal">IDbCommand</tt>. Not exposed to application, but can be
60+
extended/implemented by the developer.
61+
</p></dd><dt><span class="term">IDriver (<tt class="literal">NHibernate.Driver.IDriver</tt>)</span></dt><dd><p>
62+
(Optional) An interface encapsulating differences between ADO.NET providers, such
63+
as parameter naming conventions and supported ADO.NET features.
64+
</p></dd><dt><span class="term">ITransactionFactory (<tt class="literal">NHibernate.Transaction.ITransactionFactory</tt>)</span></dt><dd><p>
65+
(Optional) A factory for <tt class="literal">ITransaction</tt> instances. Not exposed to the
66+
application, but can be extended/implemented by the developer.
67+
</p></dd></dl></div><p>
68+
</p><p>
69+
Given a "lite" architecture, the application bypasses the
70+
<tt class="literal">ITransaction</tt>/<tt class="literal">ITransactionFactory</tt> and/or
71+
<tt class="literal">IConnectionProvider</tt> APIs to talk to ADO.NET directly.
72+
</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="architecture-states"></a>2.2.&nbsp;Instance states</h2></div></div><div></div></div><p>
73+
An instance of a persistent classes may be in one of three different states,
74+
which are defined with respect to a <span class="emphasis"><em>persistence context</em></span>.
75+
The NHibernate <tt class="literal">ISession</tt> object is the persistence context:
76+
</p><div class="variablelist"><dl><dt><span class="term">transient</span></dt><dd><p>
77+
The instance is not, and has never been associated with
78+
any persistence context. It has no persistent identity
79+
(primary key value).
80+
</p></dd><dt><span class="term">persistent</span></dt><dd><p>
81+
The instance is currently associated with a persistence
82+
context. It has a persistent identity (primary key value)
83+
and, perhaps, a corresponding row in the database. For a
84+
particular persistence context, NHibernate
85+
<span class="emphasis"><em>guarantees</em></span> that persistent identity
86+
is equivalent to CLR identity (in-memory location of the
87+
object).
88+
</p></dd><dt><span class="term">detached</span></dt><dd><p>
89+
The instance was once associated with a persistence
90+
context, but that context was closed, or the instance
91+
was serialized to another process. It has a persistent
92+
identity and, perhaps, a corrsponding row in the database.
93+
For detached instances, NHibernate makes no guarantees
94+
about the relationship between persistent identity and
95+
CLR identity.
96+
</p></dd></dl></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="architecture-current-session"></a>2.3.&nbsp;Contextual Sessions</h2></div></div><div></div></div><p>
97+
Most applications using NHibernate need some form of "contextual" sessions, where a given
98+
session is in effect throughout the scope of a given context. However, across applications
99+
the definition of what constitutes a context is typically different; and different contexts
100+
define different scopes to the notion of current.
101+
</p><p>
102+
Starting with version 1.2, NHibernate added the <tt class="literal">ISessionFactory.GetCurrentSession()</tt>
103+
method. The processing behind <tt class="literal">ISessionFactory.GetCurrentSession()</tt> is pluggable.
104+
An extension interface (<tt class="literal">NHibernate.Context.ICurrentSessionContext</tt>) and a new
105+
configuration parameter (<tt class="literal">hibernate.current_session_context_class</tt>) have been added
106+
to allow pluggability of the scope and context of defining current sessions.
107+
</p><p>
108+
See the API documentation for the <tt class="literal">NHibernate.Context.ICurrentSessionContext</tt>
109+
interface for a detailed discussion of its contract. It defines a single method,
110+
<tt class="literal">CurrentSession()</tt>, by which the implementation is responsible for
111+
tracking the current contextual session. Out-of-the-box, NHibernate comes with several
112+
implementations of this interface:
113+
</p><div class="itemizedlist"><ul type="disc"><li><p>
114+
<tt class="literal">NHibernate.Context.CallSessionContext</tt> - current sessions are tracked
115+
by <tt class="literal">CallContext</tt>. You are responsible to bind and unbind an <tt class="literal">
116+
ISession</tt> instance with static methods of class <tt class="literal">CurrentSessionContext
117+
</tt>.
118+
</p></li><li><p>
119+
<tt class="literal">NHibernate.Context.ThreadStaticSessionContext</tt> - current session is
120+
stored in a thread-static variable. This context only supports one session factory.
121+
You are responsible to bind and unbind an <tt class="literal">ISession</tt> instance with
122+
static methods of class <tt class="literal">CurrentSessionContext</tt>.
123+
</p></li><li><p>
124+
<tt class="literal">NHibernate.Context.WebSessionContext</tt> -
125+
stores the current session in <tt class="literal">HttpContext</tt>.
126+
You are responsible to bind and unbind an <tt class="literal">ISession</tt>
127+
instance with static methods of class <tt class="literal">CurrentSessionContext</tt>.
128+
</p></li><li><p>
129+
<tt class="literal">NHibernate.Context.WcfOperationSessionContext</tt> - current sessions are tracked
130+
by WCF <tt class="literal">OperationContext</tt>. You need to register the <tt class="literal">WcfStateExtension</tt>
131+
extension in WCF. You are responsible to bind and unbind an <tt class="literal">ISession
132+
</tt> instance with static methods of class <tt class="literal">CurrentSessionContext</tt>.
133+
</p></li><li><p>
134+
<tt class="literal">NHibernate.Context.ManagedWebSessionContext</tt> - current
135+
sessions are tracked by <tt class="literal">HttpContext</tt>. Removed in NHibernate 4.0
136+
- <tt class="literal">NHibernate.Context.WebSessionContext</tt> should be used instead.
137+
You are responsible to bind and unbind an <tt class="literal">ISession</tt> instance with static methods
138+
on this class, it never opens, flushes, or closes an <tt class="literal">ISession</tt> itself.
139+
</p></li></ul></div><p>
140+
The <tt class="literal">hibernate.current_session_context_class</tt> configuration parameter
141+
defines which <tt class="literal">NHibernate.Context.ICurrentSessionContext</tt> implementation
142+
should be used. Typically, the value of this parameter would just name the implementation
143+
class to use (including the assembly name); for the out-of-the-box implementations, however,
144+
there are corresponding short names: "call", "thread_static", "web" and "wcf_operation",
145+
respectively.
146+
</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="quickstart.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="session-configuration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;1.&nbsp;Quickstart with IIS and Microsoft SQL Server&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;3.&nbsp;ISessionFactory Configuration</td></tr></table></div>{% include google_analytics.html %}{% include metrika_yandex_ru.html %}</body></html>

0 commit comments

Comments
 (0)