Re: Tomcat initialize SelectorContext twice when lookup for JNDI defined in web application (META-INF/context.xml)

2015-07-23 Thread Niranjan Karunanandham
Hi all

On Tue, Jul 21, 2015 at 7:27 PM, Niranjan Karunanandham 
niranjan.k...@gmail.com wrote:

 Hi Tomcat Team,

 On Tue, Jul 21, 2015 at 4:21 PM, Konstantin Kolinko 
 knst.koli...@gmail.com wrote:

 2015-07-21 8:35 GMT+03:00 Niranjan Karunanandham niranjan.k...@gmail.com
 :
  [sending to users list]
 
  On Thu, Jul 16, 2015 at 10:23 AM, Niranjan Karunanandham 
  niranjan.k...@gmail.com wrote:
 
  Hi,
 
  On debugging Tomcat (7.0.59), I noticed that the SelectorContext is
  initialized twice when a lookup is performed for JNDI defined in web
  application (META-INF/context.xml).
  When the lookup is performed, the Servlet first calls the init method
 of
  InitailContext and this returns new SelectorContext(env, true). Then
 it
  calls the lookup method of InitialContext which again initializes the
  SelectorContext but now it returns new SelectorContext(env) [where
 the
  SelectorContextor.initialContext is set to *false*] and then the lookup
  is performed.

 1. javax.naming.InitialContext class is not ours. It is part of JDK.

 2. SelectorContext object is immutable. The first one has
 initialContext == true, the second one has false. Those are two
 different objects.

 Why are there two different SelectorContext object being created. I
 noticed that when we do a JNDI lookup from webapp, it requires the
 Context.xml to be only read-only (please correct me if am wrong) for which
 the initialContext is false for the SelectorContext. So when is the first
 SelectorContext (where the initialContext is set to true) use?


On further debugging, I noticed that when JNDI lookup is performed as
mentioned in my sample, it was creating a new SelectorContext which the
initialContext as false. On trying to connect to a queue (apacheMQ), it
does not create new SelectorContext. Why is this so or am I missing
something?

This is the code (in NamingManager) which does this:





















*private static Object getURLObject(String scheme, Object urlInfo,
  Name name, Context nameCtx,
 Hashtable environment)throws
NamingException {// e.g. ftpURLContextFactoryObjectFactory
factory = (ObjectFactory)ResourceManager.getFactory(
Context.URL_PKG_PREFIXES, environment, nameCtx,. + scheme +
. + scheme + URLContextFactory, defaultPkgPrefix);if (factory
== null)  return null;// Found object factorytry {
return factory.getObjectInstance(urlInfo, name, nameCtx, environment);
   } catch (NamingException e) {throw e;} catch (Exception
e) {NamingException ne = new NamingException();
ne.setRootCause(e);throw ne;}}*



 3. It is usually better to lookup the DataSource once (at startup time
 /first access time) and cache the reference locally.

  Why is tomcat initializing the SelectorContext twice here?
 
  My Java Webapp Code which does the lookup:
  *initCtx = new InitialContext();*
  *Context envContext = (Context) initCtx.lookup(java:comp/env);*
  *DataSource dataSource = (DataSource)
 envContext.lookup(*jdbc/contextDB
  *);*
 
  Resource defined in META-INF/context.xml in webapp:
 
  Resource name=jdbc/contextDB auth=Container type
  =javax.sql.DataSource
  maxActive=100 maxIdle=30 maxWait=1
  username=user password=user123
 driverClassName=com.mysql.jdbc.Driver
 
url=jdbc:mysql://localhost:3306/WebAppTestDB/
 


Regards,
Nira


Re: Tomcat initialize SelectorContext twice when lookup for JNDI defined in web application (META-INF/context.xml)

2015-07-21 Thread Konstantin Kolinko
2015-07-21 8:35 GMT+03:00 Niranjan Karunanandham niranjan.k...@gmail.com:
 [sending to users list]

 On Thu, Jul 16, 2015 at 10:23 AM, Niranjan Karunanandham 
 niranjan.k...@gmail.com wrote:

 Hi,

 On debugging Tomcat (7.0.59), I noticed that the SelectorContext is
 initialized twice when a lookup is performed for JNDI defined in web
 application (META-INF/context.xml).
 When the lookup is performed, the Servlet first calls the init method of
 InitailContext and this returns new SelectorContext(env, true). Then it
 calls the lookup method of InitialContext which again initializes the
 SelectorContext but now it returns new SelectorContext(env) [where the
 SelectorContextor.initialContext is set to *false*] and then the lookup
 is performed.

1. javax.naming.InitialContext class is not ours. It is part of JDK.

2. SelectorContext object is immutable. The first one has
initialContext == true, the second one has false. Those are two
different objects.

3. It is usually better to lookup the DataSource once (at startup time
/first access time) and cache the reference locally.

 Why is tomcat initializing the SelectorContext twice here?

 My Java Webapp Code which does the lookup:
 *initCtx = new InitialContext();*
 *Context envContext = (Context) initCtx.lookup(java:comp/env);*
 *DataSource dataSource = (DataSource) envContext.lookup(*jdbc/contextDB
 *);*

 Resource defined in META-INF/context.xml in webapp:

 Resource name=jdbc/contextDB auth=Container type
 =javax.sql.DataSource
 maxActive=100 maxIdle=30 maxWait=1
 username=user password=user123 driverClassName=com.mysql.jdbc.Driver

   url=jdbc:mysql://localhost:3306/WebAppTestDB/


 --
 *Niranjan Karunanandham*

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



Re: Tomcat initialize SelectorContext twice when lookup for JNDI defined in web application (META-INF/context.xml)

2015-07-21 Thread Niranjan Karunanandham
Hi Tomcat Team,

On Tue, Jul 21, 2015 at 4:21 PM, Konstantin Kolinko knst.koli...@gmail.com
 wrote:

 2015-07-21 8:35 GMT+03:00 Niranjan Karunanandham niranjan.k...@gmail.com
 :
  [sending to users list]
 
  On Thu, Jul 16, 2015 at 10:23 AM, Niranjan Karunanandham 
  niranjan.k...@gmail.com wrote:
 
  Hi,
 
  On debugging Tomcat (7.0.59), I noticed that the SelectorContext is
  initialized twice when a lookup is performed for JNDI defined in web
  application (META-INF/context.xml).
  When the lookup is performed, the Servlet first calls the init method of
  InitailContext and this returns new SelectorContext(env, true). Then
 it
  calls the lookup method of InitialContext which again initializes the
  SelectorContext but now it returns new SelectorContext(env) [where the
  SelectorContextor.initialContext is set to *false*] and then the lookup
  is performed.

 1. javax.naming.InitialContext class is not ours. It is part of JDK.

 2. SelectorContext object is immutable. The first one has
 initialContext == true, the second one has false. Those are two
 different objects.

Why are there two different SelectorContext object being created. I noticed
that when we do a JNDI lookup from webapp, it requires the Context.xml to
be only read-only (please correct me if am wrong) for which the
initialContext is false for the SelectorContext. So when is the first
SelectorContext (where the initialContext is set to true) use?



 3. It is usually better to lookup the DataSource once (at startup time
 /first access time) and cache the reference locally.

  Why is tomcat initializing the SelectorContext twice here?
 
  My Java Webapp Code which does the lookup:
  *initCtx = new InitialContext();*
  *Context envContext = (Context) initCtx.lookup(java:comp/env);*
  *DataSource dataSource = (DataSource) envContext.lookup(*jdbc/contextDB
  *);*
 
  Resource defined in META-INF/context.xml in webapp:
 
  Resource name=jdbc/contextDB auth=Container type
  =javax.sql.DataSource
  maxActive=100 maxIdle=30 maxWait=1
  username=user password=user123
 driverClassName=com.mysql.jdbc.Driver
 
url=jdbc:mysql://localhost:3306/WebAppTestDB/
 


Regards,
Nira

On Tue, Jul 21, 2015 at 4:21 PM, Konstantin Kolinko knst.koli...@gmail.com
wrote:

 2015-07-21 8:35 GMT+03:00 Niranjan Karunanandham niranjan.k...@gmail.com
 :
  [sending to users list]
 
  On Thu, Jul 16, 2015 at 10:23 AM, Niranjan Karunanandham 
  niranjan.k...@gmail.com wrote:
 
  Hi,
 
  On debugging Tomcat (7.0.59), I noticed that the SelectorContext is
  initialized twice when a lookup is performed for JNDI defined in web
  application (META-INF/context.xml).
  When the lookup is performed, the Servlet first calls the init method of
  InitailContext and this returns new SelectorContext(env, true). Then
 it
  calls the lookup method of InitialContext which again initializes the
  SelectorContext but now it returns new SelectorContext(env) [where the
  SelectorContextor.initialContext is set to *false*] and then the lookup
  is performed.

 1. javax.naming.InitialContext class is not ours. It is part of JDK.

 2. SelectorContext object is immutable. The first one has
 initialContext == true, the second one has false. Those are two
 different objects.

 3. It is usually better to lookup the DataSource once (at startup time
 /first access time) and cache the reference locally.

  Why is tomcat initializing the SelectorContext twice here?
 
  My Java Webapp Code which does the lookup:
  *initCtx = new InitialContext();*
  *Context envContext = (Context) initCtx.lookup(java:comp/env);*
  *DataSource dataSource = (DataSource) envContext.lookup(*jdbc/contextDB
  *);*
 
  Resource defined in META-INF/context.xml in webapp:
 
  Resource name=jdbc/contextDB auth=Container type
  =javax.sql.DataSource
  maxActive=100 maxIdle=30 maxWait=1
  username=user password=user123
 driverClassName=com.mysql.jdbc.Driver
 
url=jdbc:mysql://localhost:3306/WebAppTestDB/
 
 
  --
  *Niranjan Karunanandham*

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




-- 
*Niranjan Karunanandham*


Re: Tomcat initialize SelectorContext twice when lookup for JNDI defined in web application (META-INF/context.xml)

2015-07-20 Thread Niranjan Karunanandham
[sending to users list]

On Thu, Jul 16, 2015 at 10:23 AM, Niranjan Karunanandham 
niranjan.k...@gmail.com wrote:

 Hi,

 On debugging Tomcat (7.0.59), I noticed that the SelectorContext is
 initialized twice when a lookup is performed for JNDI defined in web
 application (META-INF/context.xml).
 When the lookup is performed, the Servlet first calls the init method of
 InitailContext and this returns new SelectorContext(env, true). Then it
 calls the lookup method of InitialContext which again initializes the
 SelectorContext but now it returns new SelectorContext(env) [where the
 SelectorContextor.initialContext is set to *false*] and then the lookup
 is performed.

 Why is tomcat initializing the SelectorContext twice here?

 My Java Webapp Code which does the lookup:
 *initCtx = new InitialContext();*
 *Context envContext = (Context) initCtx.lookup(java:comp/env);*
 *DataSource dataSource = (DataSource) envContext.lookup(*jdbc/contextDB
 *);*

 Resource defined in META-INF/context.xml in webapp:

 Resource name=jdbc/contextDB auth=Container type
 =javax.sql.DataSource
 maxActive=100 maxIdle=30 maxWait=1
 username=user password=user123 driverClassName=com.mysql.jdbc.Driver

   url=jdbc:mysql://localhost:3306/WebAppTestDB/


 Regards,

 *Niranjan Karunanandham*




-- 
*Niranjan Karunanandham*