You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Jeremy Crosbie <je...@crosbie.us> on 2005/11/10 04:13:12 UTC

Can cached EJB HomeHandles be invalidated?

I am using Tomcat 5.5.9 with WebLogic 8.1 as the EJB server/container.

I am configuring EJB references in the servlet context in my server.xml like
so:

<Context ...>
  <Ejb name="ejb/name" type="Session" home="ejb.home" remote="ejb.remote"
factory="my.custom.weblogic.factory" />
</Context>

The behavior I observe when the EJBs are first requested is the
getObjectInstance() method of my custom factory is invoked and the
getHomeHandle() method invoked on that return object. In subsequent requests
for the EJB I see the getEJBHome() method of the handle being invoked (I
created proxies to see what exactly was happening) and the create() method
then being called.

Under ideal conditions this is fine. But what I observe when the WebLogic
server has been shutdown is that calls to HomeHandle.getEJBHome() succeed
but then the call to create() fails. The problem is the HomeHandle never
gets invalidated and I am required to restart Tomcat in order for things to
start working again.

I am hoping that there is a way to instruct Tomcat to not cache the
HomeHandle but instead always delegate Home interface creation to my object
factory. I could handle the caching and any retry logic in a ServiceLocator.
Is this possible?

Thank you!

--jeremy 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Can cached EJB HomeHandles be invalidated?

Posted by Santosh Asbe <sa...@gmail.com>.
I will also post this this issue in other mailing list. Will surely update
you if a get a solution for the same.
 regards,
Santosh

 On 11/14/05, Jeremy Crosbie <je...@crosbie.us> wrote:
>
> You are experiencing the same problem I am. Yes, Tomcat caches the home
> handle. The problem is there is no way to indicate that the handle is
> invalid because it is not until the home interface is received and the
> create() method called that you have this problem.
>
> I am in the process of doing some research into the code and will post a
> query to the development list to see if there is interest in a feature
> forcing Tomcat to always use the ObjectFactory to retrieve the home
> interface rather than retrieving it from the cached HomeHandle.
>
>
> On 11/11/05 2:32 AM, "Santosh Asbe" <sa...@gmail.com> wrote:
>
> > Hi ,
> > I have faces similar problem with tomcat & websphere. Problem i have
> > descirbed in detail. Do inform if any solution is there for this
> problem.
> >
> > I have tomcat 4.1.30 on Linux. It servers as a web server and contains
> only
> > JSP & Servlets. We make a remote call to Websphere Application Server (
> on
> > AIX) using corbaloc like 'corbaloc::ip1:2809:ip2:2809'. Now when i one
> of my
> > App server fails, the other App Server server should take over. This
> work
> > when i use a simple java client on the Linux machine, the failover
> occurs.
> > But when i use my application in tomcat, this does not work.
> > Well we have log4j and debugging in our code.
> > We thought the singleton might be an issue. so we tried the following
> > without the singleton.
> >
> > I am using a Service locator ( singleton) which makes the initial call
> to
> > App Server and stores in the ip cache. initially we that the issue was
> with
> > the Service locator, but then even if i don't use this Service Locator,
> the
> > problem persists.
> >
> > we made a single servlet call without the singleton.We make a remote
> call to
> > Websphere Application Server ( on AIX) using corbaloc like
> > 'corbaloc::ip1:2809:ip2:2809'. Now when i one of my App server fails,
> the
> > other App Server server should take over.
> > But stil the take over was not done.
> >
> > We have talked to IBM and they say that the tomcat does some caching and
> the
> > problem is not with the App Server. Has anyone faced this issue? Can
> anyone
> > help regarding this and how can i know how and where the caching is
> done?
> > Can this issue be resolved.
> >
> >
> >
> > We have alsofound the following information:
> > the tomcat websphere connection is done via the following ports:
> > bootstrap port ( which is 2809 for us) and ORB listner port ( 41999 for
> our
> > application)
> >
> > The tomcat opens socket to connect to the bootstrap port (2809) first
> and
> > then ORB listner port (41999) later when the first call is made. Now
> when
> > the subsequent calls are made connection is made via the ORB listner
> port
> > only.
> > When one of the App Server fails... it still tries to connect to
> bootstrap
> > port (2809) of first app server. ideally it shoulde try to connect to
> the
> > new app server bootstrap port.
> >
> > Can anyone help me reg this problem. If any other information is
> required, i
> > will be glad to provide with the same.
> >
> >
> > On 11/10/05, Jeremy Crosbie <je...@crosbie.us> wrote:
> >>
> >> I am using Tomcat 5.5.9 with WebLogic 8.1 as the EJB server/container.
> >>
> >> I am configuring EJB references in the servlet context in my
> server.xmllike
> >> so:
> >>
> >> <Context ...>
> >> <Ejb name="ejb/name" type="Session" home="ejb.home" remote="ejb.remote"
> >> factory="my.custom.weblogic.factory" />
> >> </Context>
> >>
> >> The behavior I observe when the EJBs are first requested is the
> >> getObjectInstance() method of my custom factory is invoked and the
> >> getHomeHandle() method invoked on that return object. In subsequent
> >> requests
> >> for the EJB I see the getEJBHome() method of the handle being invoked
> (I
> >> created proxies to see what exactly was happening) and the create()
> method
> >> then being called.
> >>
> >> Under ideal conditions this is fine. But what I observe when the
> WebLogic
> >> server has been shutdown is that calls to HomeHandle.getEJBHome()
> succeed
> >> but then the call to create() fails. The problem is the HomeHandle
> never
> >> gets invalidated and I am required to restart Tomcat in order for
> things
> >> to
> >> start working again.
> >>
> >> I am hoping that there is a way to instruct Tomcat to not cache the
> >> HomeHandle but instead always delegate Home interface creation to my
> >> object
> >> factory. I could handle the caching and any retry logic in a
> >> ServiceLocator.
> >> Is this possible?
> >>
> >> Thank you!
> >>
> >> --jeremy
> >>
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> >> For additional commands, e-mail: users-help@tomcat.apache.org
> >>
> >>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Re: Can cached EJB HomeHandles be invalidated?

Posted by Jeremy Crosbie <je...@crosbie.us>.
You are experiencing the same problem I am. Yes, Tomcat caches the home
handle. The problem is there is no way to indicate that the handle is
invalid because it is not until the home interface is received and the
create() method called that you have this problem.

I am in the process of doing some research into the code and will post a
query to the development list to see if there is interest in a feature
forcing Tomcat to always use the ObjectFactory to retrieve the home
interface rather than retrieving it from the cached HomeHandle.


On 11/11/05 2:32 AM, "Santosh Asbe" <sa...@gmail.com> wrote:

> Hi ,
>  I have faces similar problem with tomcat & websphere. Problem i have
> descirbed in detail. Do inform if any solution is there for this problem.
> 
> I have tomcat 4.1.30 on Linux. It servers as a web server and contains only
> JSP & Servlets. We make a remote call to Websphere Application Server ( on
> AIX) using corbaloc like 'corbaloc::ip1:2809:ip2:2809'. Now when i one of my
> App server fails, the other App Server server should take over. This work
> when i use a simple java client on the Linux machine, the failover occurs.
> But when i use my application in tomcat, this does not work.
> Well we have log4j and debugging in our code.
> We thought the singleton might be an issue. so we tried the following
> without the singleton.
> 
> I am using a Service locator ( singleton) which makes the initial call to
> App Server and stores in the ip cache. initially we that the issue was with
> the Service locator, but then even if i don't use this Service Locator, the
> problem persists.
> 
> we made a single servlet call without the singleton.We make a remote call to
> Websphere Application Server ( on AIX) using corbaloc like
> 'corbaloc::ip1:2809:ip2:2809'. Now when i one of my App server fails, the
> other App Server server should take over.
> But stil the take over was not done.
> 
> We have talked to IBM and they say that the tomcat does some caching and the
> problem is not with the App Server. Has anyone faced this issue? Can anyone
> help regarding this and how can i know how and where the caching is done?
> Can this issue be resolved.
> 
> 
> 
> We have alsofound the following information:
> the tomcat websphere connection is done via the following ports:
> bootstrap port ( which is 2809 for us) and ORB listner port ( 41999 for our
> application)
> 
> The tomcat opens socket to connect to the bootstrap port (2809) first and
> then ORB listner port (41999) later when the first call is made. Now when
> the subsequent calls are made connection is made via the ORB listner port
> only.
> When one of the App Server fails... it still tries to connect to bootstrap
> port (2809) of first app server. ideally it shoulde try to connect to the
> new app server bootstrap port.
> 
> Can anyone help me reg this problem. If any other information is required, i
> will be glad to provide with the same.
> 
> 
> On 11/10/05, Jeremy Crosbie <je...@crosbie.us> wrote:
>> 
>> I am using Tomcat 5.5.9 with WebLogic 8.1 as the EJB server/container.
>> 
>> I am configuring EJB references in the servlet context in my server.xmllike
>> so:
>> 
>> <Context ...>
>> <Ejb name="ejb/name" type="Session" home="ejb.home" remote="ejb.remote"
>> factory="my.custom.weblogic.factory" />
>> </Context>
>> 
>> The behavior I observe when the EJBs are first requested is the
>> getObjectInstance() method of my custom factory is invoked and the
>> getHomeHandle() method invoked on that return object. In subsequent
>> requests
>> for the EJB I see the getEJBHome() method of the handle being invoked (I
>> created proxies to see what exactly was happening) and the create() method
>> then being called.
>> 
>> Under ideal conditions this is fine. But what I observe when the WebLogic
>> server has been shutdown is that calls to HomeHandle.getEJBHome() succeed
>> but then the call to create() fails. The problem is the HomeHandle never
>> gets invalidated and I am required to restart Tomcat in order for things
>> to
>> start working again.
>> 
>> I am hoping that there is a way to instruct Tomcat to not cache the
>> HomeHandle but instead always delegate Home interface creation to my
>> object
>> factory. I could handle the caching and any retry logic in a
>> ServiceLocator.
>> Is this possible?
>> 
>> Thank you!
>> 
>> --jeremy
>> 
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>> 
>> 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Can cached EJB HomeHandles be invalidated?

Posted by Santosh Asbe <sa...@gmail.com>.
Hi ,
 I have faces similar problem with tomcat & websphere. Problem i have
descirbed in detail. Do inform if any solution is there for this problem.

I have tomcat 4.1.30 on Linux. It servers as a web server and contains only
JSP & Servlets. We make a remote call to Websphere Application Server ( on
AIX) using corbaloc like 'corbaloc::ip1:2809:ip2:2809'. Now when i one of my
App server fails, the other App Server server should take over. This work
when i use a simple java client on the Linux machine, the failover occurs.
But when i use my application in tomcat, this does not work.
Well we have log4j and debugging in our code.
We thought the singleton might be an issue. so we tried the following
without the singleton.

I am using a Service locator ( singleton) which makes the initial call to
App Server and stores in the ip cache. initially we that the issue was with
the Service locator, but then even if i don't use this Service Locator, the
problem persists.

we made a single servlet call without the singleton.We make a remote call to
Websphere Application Server ( on AIX) using corbaloc like
'corbaloc::ip1:2809:ip2:2809'. Now when i one of my App server fails, the
other App Server server should take over.
But stil the take over was not done.

We have talked to IBM and they say that the tomcat does some caching and the
problem is not with the App Server. Has anyone faced this issue? Can anyone
help regarding this and how can i know how and where the caching is done?
Can this issue be resolved.



We have alsofound the following information:
the tomcat websphere connection is done via the following ports:
bootstrap port ( which is 2809 for us) and ORB listner port ( 41999 for our
application)

The tomcat opens socket to connect to the bootstrap port (2809) first and
then ORB listner port (41999) later when the first call is made. Now when
the subsequent calls are made connection is made via the ORB listner port
only.
When one of the App Server fails... it still tries to connect to bootstrap
port (2809) of first app server. ideally it shoulde try to connect to the
new app server bootstrap port.

Can anyone help me reg this problem. If any other information is required, i
will be glad to provide with the same.


On 11/10/05, Jeremy Crosbie <je...@crosbie.us> wrote:
>
> I am using Tomcat 5.5.9 with WebLogic 8.1 as the EJB server/container.
>
> I am configuring EJB references in the servlet context in my server.xmllike
> so:
>
> <Context ...>
> <Ejb name="ejb/name" type="Session" home="ejb.home" remote="ejb.remote"
> factory="my.custom.weblogic.factory" />
> </Context>
>
> The behavior I observe when the EJBs are first requested is the
> getObjectInstance() method of my custom factory is invoked and the
> getHomeHandle() method invoked on that return object. In subsequent
> requests
> for the EJB I see the getEJBHome() method of the handle being invoked (I
> created proxies to see what exactly was happening) and the create() method
> then being called.
>
> Under ideal conditions this is fine. But what I observe when the WebLogic
> server has been shutdown is that calls to HomeHandle.getEJBHome() succeed
> but then the call to create() fails. The problem is the HomeHandle never
> gets invalidated and I am required to restart Tomcat in order for things
> to
> start working again.
>
> I am hoping that there is a way to instruct Tomcat to not cache the
> HomeHandle but instead always delegate Home interface creation to my
> object
> factory. I could handle the caching and any retry logic in a
> ServiceLocator.
> Is this possible?
>
> Thank you!
>
> --jeremy
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>