webForumDet fria alternativet

Connection pooling i Tomcat

5 svar · 332 visningar · startad av swede

swedeMedlem sedan feb. 2004230 inlägg
#1

Hur sätter man upp connection pooling i Tomcat?
Jag har försökt förstå tutorialen som finns i Tomcat docs en,
men jag får bara klagomål i loggfilen när den startar och inga sessioner loggar in på mySQL servern.

Är det server.xml eller web.xml som ska editeras?
Och vad går var?

Vill skapa en generell connection pool till en mysql databas som
alla webappar ska kunna använda sig av.

Har laddat ned drivis till mysqlen och så.

JaarMedlem sedan juli 2001434 inlägg
#2

Här är hur jag har det.. kanske kan hjälpa dig fast det är för oracle...

					<Resource name="jdbc/MyOracleDB" auth="Container" type="javax.sql.DataSource"/>
					<ResourceParams name="jdbc/MyOracleDB">
						<parameter>
							<name>factory</name>
							<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
						</parameter>
				
					   <!-- Maximum number of dB connections in pool. Make sure you
					        configure your mysqld max_connections large enough to handle
					        all of your db connections. Set to 0 for no limit.
					        -->
						<parameter>
							<name>maxActive</name>
							<value>100</value>
						</parameter>
				
					    <!-- Maximum number of idle dB connections to retain in pool.
					       	 Set to 0 for no limit.
					         -->
						<parameter>
							<name>maxIdle</name>
							<value>30</value>
						</parameter>
				
					    <!-- Maximum time to wait for a dB connection to become available
				        	 in ms, in this example 10 seconds. An Exception is thrown if
					         this timeout is exceeded.  Set to -1 to wait indefinitely.
				        	 -->
						<parameter>
							<name>maxWait</name>
							<value>10000</value>
						</parameter>
				
					    <!-- Oracle dB username and password for dB connections  -->
						<parameter>
							<name>username</name>
							<value>myUser</value>
						</parameter>
						<parameter>
							<name>password</name>
							<value>myPassword</value>
						</parameter>

					    <!-- Class name for oracle JDBC driver -->
						<parameter>
							<name>driverClassName</name>		
							<value>oracle.jdbc.driver.OracleDriver</value>
						</parameter>

					    <!-- The JDBC connection url for connecting to your MySQL dB.
					         The autoReconnect=true argument to the url makes sure that the
					         mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
					         connection.  mysqld by default closes idle connections after 8 hours.
					         -->
						<parameter>
							<name>url</name>

							<value>jdbc:oracle:thin:@195.0.0.1:1521:DATABASE</value>
						</parameter>

						<parameter>
							<name>validationQuery</name>
							<value>select count(*) from myTable</value>
						</parameter>
						<parameter>
							<name>testOnBorrow</name>
							<value>true</value>
						</parameter>
						<parameter>
							<name>testWhileIdle</name>
							<value>true</value>
						</parameter>
						<parameter>
							<name>timeBetweenEvictionRunsMillis</name>
							<value>600000</value>
						</parameter>
						<parameter>
							<name>minEvictableIdleTimeMillis</name>
							<value>600000</value>
						</parameter>

					</ResourceParams>

sedan i web.xml

	<resource-ref>
		<description>Oracle database connection for my connection</description> 
        <res-ref-name>jdbc/MyOracleDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
	</resource-ref>

Sedan hämtar jag det genom följande:

				Context initContext = new InitialContext();
				Context envContext = (Context) initContext.lookup("java:/comp/env");
				dataSource = (DataSource) envContext.lookup("jdbc/MyOracleDB);

			conn = dataSource.getConnection();

Kanske hjälper dig lite iaf... Lycka till

jmeMedlem sedan maj 20012 237 inlägg
#3

Även om jag inte var frågeställaren så tackra jag för förslaget jag med. Har haft connection-pooling i tankarna och skall i dagarna testa ditt förslag.:)

swedeMedlem sedan feb. 2004230 inlägg
#4

Lång postning, men vad är fel?
Den loggen yrar något om att den inte kan skapa naming någonting...

Får följande fel i catalina.out:
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:189)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:301)
at org.apache.naming.NamingContext.lookup(NamingContext.java:834)
at org.apache.naming.NamingContext.lookup(NamingContext.java:181)
at org.apache.naming.NamingContext.lookup(NamingContext.java:822)
at org.apache.naming.NamingContext.lookup(NamingContext.java:181)
at org.apache.naming.NamingContext.lookup(NamingContext.java:822)
at org.apache.naming.NamingContext.lookup(NamingContext.java:181)
at org.apache.naming.NamingContext.lookup(NamingContext.java:822)
at org.apache.naming.NamingContext.lookup(NamingContext.java:194)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:183)
at javax.naming.InitialContext.lookup(InitialContext.java:347)
at foo.DBTest.init(Unknown Source)
<snip>

Min server.xml innehåller följande:
<!-- Global MySQL connection -->
<Resource name="jdbc/MySQLDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/MySQLDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

  ..En massa parametrar här...

   \<parameter\>
     \<name\>driverClassName\</name\>            
     \<value\>org.gjt.mm.mysql.Driver\</value\>
   \</parameter\>

   \<parameter\>
     \<name\>url\</name\>
     \<value\>jdbc:mysql://localhost:3306/javatest?autoReconnect=true\</value\>
   \</parameter\>

\</ResourceParams\>

Och min web.xml:
<resource-ref>
<description>DB connection</description>
<res-ref-name>jdbc/MySQLDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

JaarMedlem sedan juli 2001434 inlägg
#5

Hej .. vet inte om detta är felet men <Resource> ska ligga under den context du vill använda den i enligt mitt exempel.

Tror min kod hämtar en resource i applikationens context

swedeMedlem sedan feb. 2004230 inlägg
#6

Äh, jag ger upp med connection-pooling tills vidare...
Crap :(

128 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)