On 27 Dec 2011, at 01:33, S B <sbl...@gmail.com> wrote:

> On Mon, Dec 26, 2011 at 3:28 PM, Pid * <p...@pidster.com> wrote:
>
>> On 26 Dec 2011, at 09:50, S B <sbl...@gmail.com> wrote:
>>
>>> On Sat, Dec 24, 2011 at 6:29 PM, Pid <p...@pidster.com> wrote:
>>>
>>>> On 23/12/2011 04:57, S B wrote:
>>>>> On Thu, Dec 22, 2011 at 8:49 PM, Pid <p...@pidster.com> wrote:
>>>>>
>>>>>> On 22/12/2011 10:34, Konstantin Kolinko wrote:
>>>>>>> 2011/12/20 S B <sbl...@gmail.com>:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I created and deployed an MBean in my tomcat. It uses datasource to
>>>>>> connect
>>>>>>>> to DB.
>>>>>>>>
>>>>>>>> My questions is:
>>>>>>>>
>>>>>>>> When I create InitialContext() inside MBean's constructor and pass
>> the
>>>>>>>> envContext to DBManager class to lookup datasource it works fine.
>>>>>> However
>>>>>>>> when I create InitialContext() in DBManager  class, it fails.
>>>>>>>
>>>>>>> IIRC what InitialContext() sees as its environment highly depends on
>>>>>>> what classloader is active. That is TCCL =
>>>>>>> Thread.getContextClassLoader().
>>>>>>>
>>>>>>> So while it is run from within web application your TCCL = your
>>>>>>> webapp's classloader.
>>>>>>>
>>>>>>> When it is invoked from jconsole it might be a separate Thread, not
>>>>>>> related to your web application.
>>>>>>
>>>>>>
>>>>>> Like he ^^^ said.  :)
>>>>>>
>>>>>>
>>>>>> p
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> [key:62590808]
>>>>>>
>>>>>>
>>>>> Hi Pid/Konstantin,
>>>>>
>>>>> yes you are right. I just verified it. When it is invoked from
>> jconsole,
>>>>> the classloader is: sun.misc.Launcher$AppClassLoader@61e63e3d
>>>>> and when it is run within a web application the clasloader is
>>>>> WebAppClassloader.
>>>>>
>>>>> So, how can I force it to use webapp classloader during new
>>>>> InitialContext() while invoking from jconsole
>>>>> One possible way is to reuse the initialContext created during server
>>>>> startup. (pass it as param during invocation from jconsole).
>>>>>
>>>>> Is there a smarter way ??
>>>>
>>>> I am a bit concerned about how you are registering the bean inside the
>>>> bean's own constructor.  I am not clear on how you are subsequently
>>>> unregistering that bean, before the reloading operation - and I am not
>>>> at all clear what the purpose of reloading is anyway.
>>>>
>>>> Is there a reason that the MBean itself needs to be recreated?
>>>>
>>>> Bear in mind that you are attempting to re-initialise the MBean, while
>>>> you are still using it.  This does not seem like a good idea to me.
>>>>
>>>> I would suggest that you either have a separate Manager MBean that does
>>>> the reloading, or just have the reload method call the actual code on
>>>> the DB, without re-initialising the bean.
>>>>
>>>>
>>>> p
>>>>
>>>>
>>>> --
>>>>
>>>> [key:62590808]
>>>>
>>>>
>>> Hi,
>>>
>>> un-registering of mbean doesn't happen until servlet's destroy method is
>>> called.
>>> Actually, registration of bean happen only once, ie during server
>> startup.
>>> This time mbean's constructor is called and it is registered with MBean
>>> server.
>>> (I was wrong earlier when I said, constructor is called on each
>> invocation
>>> of reload() method from jconsole. sorry about that. i was lill confused.)
>>>
>>> MBean is never re-created. It is created only once and registered only
>> once.
>>>
>>> actual flow is:
>>>
>>> click reload() on jconsole gui.
>>> *it causes constructor of MBeanImpl to run. (verified from logs.)*  --
>> *Wrong.
>>> pls disregard this statement.*
>>> calls reload() defined in MBeanImpl.
>>> calls DBManager.reload()
>>> inside DBManager.reload() it fails at InitialContext initContext = new
>>> InitialContext();
>>> the exception is  -  javax.naming.NoInitialContextException: Cannot
>>> instantiate class: org.apache.naming.java.javaURLContextFactory [Root
>>> exception is java.lang.ClassNotFoundException:
>>> org.apache.naming.java.javaURLContextFactory]
>>
>> OK, but what is the purpose of DBManager.reload()?
>>
>>
>> p
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>
>
> Hi Pid, Marry Christmas !!!
> Purpose of DBManager.reload() is to load some application specific data
> from DB. Pls don't consider reload() as reload of MBean.
> reload() can better be renamed as loadData().
>
> when I invoke reload() from jconsole my application is suppose to make a db
> connection and load app specific data from database.

OK, so why not retain a reference to the DataSource that you're
getting the connection from?


p

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

Reply via email to