webForumDet fria alternativet
Logga in / Bli medlem

Connection pooling i Tomcat

Java

5 svar · 332 visningar · startad av swede

Medlem sedan feb. 2004230 inlägg
Frågan#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å.

Medlem 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

Medlem 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.:)

Medlem 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>

Medlem 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

Medlem sedan feb. 2004230 inlägg
#6

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

387 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
124 ms — deklarationer (db)
131 ms — hämta statistik (db)
128 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)