Each component has its own LifestyleManager, so you can registered several
components and they will be released appropretely. I like this.
Couple
of questions:
- Why
did you empty override the Release() and created Evict() ?
- I am
assuming that Calling Release() will eventually call Dispose(), am I correct?
From:
[EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Craig
Neuwirt
Sent: Saturday, July 15, 2006 5:01 PM
To: [email protected]
Subject: Re: [Castle-users] LifeStyle for an HttpRequest
How does this one look
On 7/15/06, Ayende Rahien <[EMAIL PROTECTED]> wrote:
I am not sure what the
implications of multiply threads attaching/detaching to the event at the same
time. I would guess that it would cause locks, but I am not sure.
It is certain that the event
add/remove methods will become hotspots in the application.
One thing to note is that this:
if (EndRequest != null) EndRequest(sender, e);
Is not MT safe. If I
unsubscribed from the event between the if and the call, you will get null
reference exception.
On 7/15/06, Ayende Rahien <[EMAIL PROTECTED]> wrote:
That approach is a memory leak,
mind you.
The static EndRequest event
will hold references to all the life style managers for all the requests.
But I am unregistering from the event too. How will it still hold one
to the managers.
It is preferable to just
register it in the HttpContext, something like this:
Public void
RegisterForDisposale(IDisposable dis)
{
IList<IDisposable> disposables =
HttpCotext.Current.Items["Disposables.List.Items"];
disposables.Add(dis);
}
Public void OnEndRequest(object
sender, EventArgs e)
{
Foreach(IDisposable dis in
HttpContext.Current.Items["Disposables.List.Items"])
{
Dis.Dispose();
}
}
I'll try out this approach. It requires fewer registrations.
Yup, that is what I ended up doing. I just created a Module that
register for EndRequest events and exposes a
static EndRequest event that the lifestyle manager can register interest
in. It would have been nice if you could
HttpContext.ApplicationInstance.EndRequest += Application_EndRequest
On 7/15/06, Ayende Rahien <[EMAIL PROTECTED]
> wrote:
Create a singleton object that
will dispose of objects in the HttpContext.
On the first Resolve(),
register the object in the singleton, and have it register for EndReqeust, and
dipose all the registered objects in that requrest.
Unfortunately, my exact idea does not work. I actually wanted to
attach to the EndRequest event within the PerWebReqyestLifeStyleManager on the
SPECIFIC instance related to the current Http context. This would
have avoided modules or Global.asax needs. However, the pipeline takes
a snapshot of the event handlers
before processing begins to any new registrations are ignored.
On 7/15/06, Ayende Rahien <
[EMAIL PROTECTED] > wrote:
That would work too.
I have a bias toward
HttpModules because they are reusables, that is all.
If you want to go this route,
just use Global.asax for this. The Application_EndRequest will be called per
request.
What if I register for the EndRequest on the
HttpContext.Current.ApplicationInstance and then Release the component
there. Wouldn't that event apply only to that specific
ApplicationInstance. I could unregister the event too.
On 7/14/06, Ayende Rahien <
[EMAIL PROTECTED] > wrote:
I see, that being the case, I
would suggest using the PerRequest lifestyle, and then handling the RequestEnd
in a HttpModule.
As well as adding a finalizer,
just in case.
It is a legacy component that holds
connections to one or more databases as well as resources that must be
released.
On 7/14/06, Ayende Rahien <
[EMAIL PROTECTED] > wrote:
Why do you need to release the
component?
Thats kinda what I want to do. My only
concern is how to determine when the logical thread is over so the
LifeStyleManager can properly release the component.
On 7/14/06, Ayende Rahien <
[EMAIL PROTECTED] > wrote:
Create a hybrid then, which
would delegate to the PerRequest or PerThread if the HttpContext.Current exists
or not.
Subject: Re: [Castle-users] LifeStyle for an HttpRequest
I agree. I would like to create a LifestyleManager that functions as a
PerWebRequest
in a Web environment and a PerLogicalRequest in a non-web environment.
In affect,
a LogicalCallRequestLifeStyleManager. I wonder if it is correct to use
HttpContext if
available, otherwise use the CallContext. The true details of the
latter still eludes me.
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
CastleProject-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/castleproject-users
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
CastleProject-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/castleproject-users
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
CastleProject-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/castleproject-users
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
CastleProject-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/castleproject-users
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
CastleProject-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/castleproject-users
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
CastleProject-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/castleproject-users
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
CastleProject-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/castleproject-users
|