From c1a865c3c9b5daf73d556b02a06258e00a6540e9 Mon Sep 17 00:00:00 2001 From: aalmiray Date: Sun, 1 Mar 2015 13:03:15 +0100 Subject: [PATCH] Add JMX support; update dependencies --- build.gradle | 24 ++++++----- gradle.properties | 6 +-- gradle/wrapper/gradle-wrapper.jar | Bin 51017 -> 52141 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- .../griffon-gsql-core.gradle | 6 +-- .../griffon/runtime/gsql/GsqlAddon.java | 18 +++++++++ .../runtime/jmx/GsqlStorageMonitor.java | 38 ++++++++++++++++++ .../runtime/jmx/GsqlStorageMonitorMXBean.java | 25 ++++++++++++ .../griffon-gsql-groovy-compile.gradle | 2 +- 9 files changed, 105 insertions(+), 18 deletions(-) create mode 100644 subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitor.java create mode 100644 subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitorMXBean.java diff --git a/build.gradle b/build.gradle index c460387..99ec6b7 100644 --- a/build.gradle +++ b/build.gradle @@ -3,17 +3,18 @@ import java.text.SimpleDateFormat buildscript { repositories { jcenter() + mavenLocal() } dependencies { - classpath 'org.codehaus.griffon:gradle-griffon-plugin:2.1.0' - classpath 'org.codehaus.griffon:gradle-griffon-build-plugin:2.1.0' - classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.1.0' + classpath 'org.codehaus.griffon:gradle-griffon-plugin:2.2.0' + classpath 'org.codehaus.griffon:gradle-griffon-build-plugin:2.2.0' + classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.3.1' classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' - classpath 'org.ajoberstar:gradle-git:0.12.0' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.1' + classpath 'org.ajoberstar:gradle-git:1.0.0' classpath 'org.kordamp.gradle:stats-gradle-plugin:0.1.3' - classpath 'com.github.ben-manes:gradle-versions-plugin:0.6' + classpath 'com.github.ben-manes:gradle-versions-plugin:0.8' } } @@ -65,8 +66,13 @@ subprojects { subproj -> } subproj.tasks.withType(JavaCompile) { - sourceCompatibility = rootProject.sourceCompatibility - targetCompatibility = rootProject.targetCompatibility + sourceCompatibility = subproj.sourceCompatibility + targetCompatibility = subproj.targetCompatibility + } + + subproj.tasks.withType(GroovyCompile) { + sourceCompatibility = subproj.sourceCompatibility + targetCompatibility = subproj.targetCompatibility } sourceSets { @@ -92,7 +98,7 @@ subprojects { subproj -> dependencies { testCompile 'junit:junit:4.12' testCompile 'org.spockframework:spock-core:0.7-groovy-2.0' - testCompile 'org.slf4j:slf4j-simple:1.7.7' + testCompile 'org.slf4j:slf4j-simple:1.7.10' } task sourceJar(type: Jar) { diff --git a/gradle.properties b/gradle.properties index 6f93d0f..c3bfec9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group=org.codehaus.griffon.plugins -version=1.0.0 +version=1.1.0 pluginBaseName=griffon-gsql -griffonVersion=2.1.0 +griffonVersion=2.2.0 griffonPlugin=true publishJars=false sourceCompatibility=1.7 @@ -13,5 +13,5 @@ projectIssueTrackerUrl=https://github.com/griffon-plugins/griffon-gsql-plugin/is projectVcsUrl=https://github.com/griffon-plugins/griffon-gsql-plugin javadocFooter=Copyright © 2014 Andres Almiray. All rights reserved. projectLabels=griffon,plugin,datasource,gsql -jacocoVersion=0.7.2.201409121644 +jacocoVersion=0.7.3.201502191951 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 3d0dee6e8edfecc92e04653ec780de06f7b34f8b..085a1cdc27db1185342f15a00441734e74fe3735 100644 GIT binary patch delta 16179 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1b35032..7523306 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Sep 08 14:12:16 CEST 2014 +#Mon Feb 16 21:40:54 CET 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.3-bin.zip diff --git a/subprojects/griffon-gsql-core/griffon-gsql-core.gradle b/subprojects/griffon-gsql-core/griffon-gsql-core.gradle index da79481..906dd1e 100644 --- a/subprojects/griffon-gsql-core/griffon-gsql-core.gradle +++ b/subprojects/griffon-gsql-core/griffon-gsql-core.gradle @@ -10,12 +10,12 @@ griffon { apply from: rootProject.file('gradle/code-coverage.gradle') dependencies { - griffon 'org.codehaus.griffon.plugins:griffon-datasource-plugin:1.1.0' + compile 'org.codehaus.griffon.plugins:griffon-datasource-core:1.2.0' testCompileOnly "org.codehaus.griffon:griffon-groovy-compile:${griffon.version}" - testRuntime('com.h2database:h2:1.4.184') { transitive = false } - testRuntime "org.slf4j:slf4j-simple:1.7.7" + testRuntime('com.h2database:h2:1.4.185') { transitive = false } + testRuntime "org.slf4j:slf4j-simple:1.7.10" testRuntime "org.codehaus.griffon:griffon-guice:${griffon.version}" diff --git a/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/gsql/GsqlAddon.java b/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/gsql/GsqlAddon.java index c1b29c7..b5762dd 100644 --- a/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/gsql/GsqlAddon.java +++ b/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/gsql/GsqlAddon.java @@ -16,12 +16,16 @@ package org.codehaus.griffon.runtime.gsql; import griffon.core.GriffonApplication; +import griffon.core.env.Metadata; import griffon.inject.DependsOn; import griffon.plugins.gsql.GsqlCallback; import griffon.plugins.gsql.GsqlFactory; import griffon.plugins.gsql.GsqlHandler; +import griffon.plugins.gsql.GsqlStorage; +import griffon.plugins.monitor.MBeanManager; import groovy.sql.Sql; import org.codehaus.griffon.runtime.core.addon.AbstractGriffonAddon; +import org.codehaus.griffon.runtime.jmx.GsqlStorageMonitor; import javax.annotation.Nonnull; import javax.inject.Inject; @@ -42,6 +46,20 @@ public class GsqlAddon extends AbstractGriffonAddon { @Inject private GsqlFactory gsqlFactory; + @Inject + private GsqlStorage gsqlStorage; + + @Inject + private MBeanManager mbeanManager; + + @Inject + private Metadata metadata; + + @Override + public void init(@Nonnull GriffonApplication application) { + mbeanManager.registerMBean(new GsqlStorageMonitor(metadata, gsqlStorage)); + } + public void onStartupStart(@Nonnull GriffonApplication application) { for (String dataSourceName : gsqlFactory.getDatasourceNames()) { Map config = gsqlFactory.getConfigurationFor(dataSourceName); diff --git a/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitor.java b/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitor.java new file mode 100644 index 0000000..7b58120 --- /dev/null +++ b/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitor.java @@ -0,0 +1,38 @@ +/* + * Copyright 2014-2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.codehaus.griffon.runtime.jmx; + +import griffon.core.env.Metadata; +import griffon.plugins.gsql.GsqlStorage; +import groovy.sql.Sql; +import org.codehaus.griffon.runtime.monitor.AbstractObjectStorageMonitor; + +import javax.annotation.Nonnull; + +/** + * @author Andres Almiray + * @since 1.1.0 + */ +public class GsqlStorageMonitor extends AbstractObjectStorageMonitor implements GsqlStorageMonitorMXBean { + public GsqlStorageMonitor(@Nonnull Metadata metadata, @Nonnull GsqlStorage delegate) { + super(metadata, delegate); + } + + @Override + protected String getStorageName() { + return "gsql"; + } +} diff --git a/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitorMXBean.java b/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitorMXBean.java new file mode 100644 index 0000000..cea679d --- /dev/null +++ b/subprojects/griffon-gsql-core/src/main/java/org/codehaus/griffon/runtime/jmx/GsqlStorageMonitorMXBean.java @@ -0,0 +1,25 @@ +/* + * Copyright 2014-2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.codehaus.griffon.runtime.jmx; + +import org.codehaus.griffon.runtime.monitor.ObjectStorageMonitorMXBean; + +/** + * @author Andres Almiray + * @since 1.1.0 + */ +public interface GsqlStorageMonitorMXBean extends ObjectStorageMonitorMXBean { +} diff --git a/subprojects/griffon-gsql-groovy-compile/griffon-gsql-groovy-compile.gradle b/subprojects/griffon-gsql-groovy-compile/griffon-gsql-groovy-compile.gradle index 30b9248..305bd4b 100644 --- a/subprojects/griffon-gsql-groovy-compile/griffon-gsql-groovy-compile.gradle +++ b/subprojects/griffon-gsql-groovy-compile/griffon-gsql-groovy-compile.gradle @@ -7,7 +7,7 @@ dependencies { testCompileOnly "org.codehaus.griffon:griffon-groovy-compile:${griffonVersion}" testRuntime "org.codehaus.griffon:griffon-guice:${griffonVersion}" - testRuntime "org.slf4j:slf4j-simple:1.7.7" + testRuntime "org.slf4j:slf4j-simple:1.7.10" } compileGroovy.enabled = false