Code Sample that fails with exception(I am invoking reload() from jconsole
):
class MBeanImpl implements MBeanInterface{
public MBeanImpl{
// code to register this bean.
}
@Override
public void reload() {
DBManager.loadFromDB();
}
}
class DBManager{
public static void loadFromDB(){
InitialContext initContext = new
InitialContext(); // here it fails with exception
avax.naming.NoInitialContextException: Cannot instantiate class:
org.apache.naming.java.javaURLContextFactory [Root
// exception is java.lang.ClassNotFoundException:
org.apache.naming.java.javaURLContextFactory]
Context context = (Context)
initContext.lookup("java:comp/env");
logger.info("context found " + context);
BasicDataSource ds = (BasicDataSource)
context.lookup("jdbc/" + dataSourceName);
...............
...............
}
}
---------------------------------------------
Code Sample that works:
class MBeanImpl implements MBeanInterface{
private Context envContext = null;
public MBeanImpl{
InitialContext initialContext = new InitialContext();
envContext = (Context) initialContext.lookup("java:/comp/env");
// code to register this bean.
}
@Override
public void reload() {
DBManager.loadFromDB(envContext); // passed context object
obtained in constructor
}
}
class DBManager{
public static void loadFromDB(Context context){
BasicDataSource ds = (BasicDataSource)
context.lookup("jdbc/" + dataSourceName); // works fine as I am not
creating new InitialContext here.
...............
...............
}
}
On Tue, Dec 20, 2011 at 4:59 PM, S B <[email protected]> wrote:
> Hi,
> I am using :
>
> Server version: Apache Tomcat/6.0.32
> OS Name: Mac OS X
> OS Version: 10.6.8
> Architecture: x86_64
> JVM Version: 1.6.0_29-b11-402-10M3527
>
> Thanks,
> Ravi
>
>
> On Tue, Dec 20, 2011 at 4:52 PM, Pid * <[email protected]> wrote:
>
>> On 20 Dec 2011, at 11:02, S B <[email protected]> wrote:
>>
>> > Hi,
>> >
>> > I created and deployed an MBean in my tomcat. It uses datasource to
>> connect
>> > to DB.
>>
>> Which version of Java? Tomcat?
>>
>>
>> > 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.
>> >
>> > Is it necessary to create InitialContext() during loading of MBean
>> (either
>> > in ContextListener class or inside MBean constructor).
>>
>> It depends on where you run the code. You haven't told us this.
>>
>> Can you post a code example.
>>
>>
>> p
>>
>>
>> > When I did new InitialContext() in my DBManager class which is called
>> from
>> > hello method of MBean it failed with below exception:
>> >
>> > avax.naming.NoInitialContextException: Cannot instantiate class:
>> > org.apache.naming.java.javaURLContextFactory [Root exception is
>> > java.lang.ClassNotFoundException:
>> > org.apache.naming.java.javaURLContextFactory]
>> >
>> > I invoked hello method of MBean from JConsole.
>> >
>> >
>> > Please let me know is it Tomcat specific? or same behavior is seen
>> across
>> > all app servers. Also, What difference does it make if I create
>> > InitialContext inside MBean's constructor or in some other class at a
>> later
>> > point of time.
>> >
>> > Thanks
>> > Ravi
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>