Răsfoiți Sursa

Issue #814 - Fix the lookup of the Resin DataSource

Use custom data source that claims to be much faster than the competitors.
Upgrade Wicket to latest stable (6.16)
Martin Tzvetanov Grigorov 11 ani în urmă
părinte
comite
190e051c77

+ 6 - 11
wicket/pom.xml

@@ -21,9 +21,8 @@
 	</licenses>
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<wicket.version>6.15.0</wicket.version>
+		<wicket.version>6.16.0</wicket.version>
 		<jetty.version>8.1.14.v20131031</jetty.version>
-		<bonecp.version>0.8.0.RELEASE</bonecp.version>
 		<slf4j.version>1.7.7</slf4j.version>
 	</properties>
 	<dependencies>
@@ -34,16 +33,12 @@
 			<version>${wicket.version}</version>
 		</dependency>
 
+		<!-- a faster DataSource -->
 		<dependency>
-			<groupId>com.jolbox</groupId>
-			<artifactId>bonecp</artifactId>
-			<version>${bonecp.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-			<version>17.0</version>
+			<groupId>com.zaxxer</groupId>
+			<artifactId>HikariCP</artifactId>
+			<version>1.4.0</version>
+			<scope>compile</scope>
 		</dependency>
 
 		<!-- LOGGING DEPENDENCIES - LOG4J -->

+ 26 - 37
wicket/src/main/java/hellowicket/WicketApplication.java

@@ -1,14 +1,12 @@
 package hellowicket;
 
-import java.io.IOException;
-import java.util.Properties;
-
+import javax.naming.InitialContext;
 import javax.sql.DataSource;
 
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.settings.IRequestCycleSettings;
 
-import com.jolbox.bonecp.BoneCPDataSource;
+import com.zaxxer.hikari.HikariDataSource;
 
 import hellowicket.dbupdates.HelloDbUpdatesReference;
 import hellowicket.fortune.FortunePage;
@@ -19,7 +17,7 @@ import hellowicket.plaintext.HelloTextReference;
  */
 public class WicketApplication extends WebApplication
 {
-	private BoneCPDataSource db;
+	private DataSource db;
 
 	@Override
 	public Class<HomePage> getHomePage()
@@ -54,15 +52,16 @@ public class WicketApplication extends WebApplication
 	@Override
 	protected void onDestroy()
 	{
-		db.close();
+		if (db instanceof HikariDataSource) {
+			((HikariDataSource)db).close();
+		}
 		super.onDestroy();
 	}
 
-//	@Override
-//	public RuntimeConfigurationType getConfigurationType()
-//	{
-//		return RuntimeConfigurationType.DEVELOPMENT;
-//	}
+	private boolean useResinDataSource()
+	{
+		return false;
+	}
 
 	public static WicketApplication get()
 	{
@@ -74,43 +73,33 @@ public class WicketApplication extends WebApplication
 		return db;
 	}
 
-	private BoneCPDataSource newDataSource()
+	private DataSource newDataSource()
 	{
+		DataSource dataSource;
 		try
 		{
 			Class.forName("com.mysql.jdbc.Driver");
-		} catch (ClassNotFoundException e)
-		{
-			throw new RuntimeException("Cannot load MySQL JDBC driver", e);
-		}
-		BoneCPDataSource ds = new BoneCPDataSource();
-		Properties settings = loadSettings();
-		ds.setJdbcUrl(settings.getProperty("mysql.uri"));
-		ds.setUsername(settings.getProperty("mysql.user"));
-		ds.setPassword(settings.getProperty("mysql.password"));
 
-		return ds;
-	}
-
-	private Properties loadSettings()
-	{
-		ClassLoader classLoader = WicketApplication.class.getClassLoader();
-		Properties settings = new Properties();
-
-		try
-		{
-			if (usesDeploymentConfig())
+			if (useResinDataSource())
 			{
-				settings.load(classLoader.getResourceAsStream("prod.properties"));
+				InitialContext jndiContext = new InitialContext();
+				dataSource = (DataSource) jndiContext.lookup("java:comp/env/jdbc/hello_world");
 			}
 			else
 			{
-				settings.load(classLoader.getResourceAsStream("dev.properties"));
+				// use faster DataSource impl
+				HikariDataSource ds = new HikariDataSource();
+				ds.setJdbcUrl("jdbc:mysql://localhost:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts&cacheRSMetadata=true");
+				ds.setDriverClassName("com.mysql.jdbc.Driver");
+				ds.setUsername("benchmarkdbuser");
+				ds.setPassword("benchmarkdbpass");
+				dataSource = ds;
 			}
-		} catch (IOException e)
+		} catch (Exception x)
 		{
-			throw new RuntimeException("Cannot load the settings!", e);
+			throw new RuntimeException("Cannot create the data source", x);
 		}
-		return settings;
+
+		return dataSource;
 	}
 }

+ 0 - 3
wicket/src/main/resources/dev.properties

@@ -1,3 +0,0 @@
-mysql.uri = jdbc:mysql://localhost:3306/hello_world?jdbcCompliantTruncation=false&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false&maintainTimeStats=false&useServerPrepStmts&cacheRSMetadata=true
-mysql.user = benchmarkdbuser
-mysql.password = benchmarkdbpass

+ 0 - 3
wicket/src/main/resources/prod.properties

@@ -1,3 +0,0 @@
-mysql.uri = java:comp/env/jdbc/hello_world
-mysql.user = benchmarkdbuser
-mysql.password = benchmarkdbpass

+ 1 - 0
wicket/src/main/webapp/WEB-INF/web.xml

@@ -33,4 +33,5 @@
 		<filter-name>wicket.hellowicket</filter-name>
 		<url-pattern>/*</url-pattern>
 	</filter-mapping>
+
 </web-app>