Skip to content

Commit

Permalink
Gradle derby plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
martinqcz committed Feb 17, 2017
1 parent 173d134 commit 2464a04
Show file tree
Hide file tree
Showing 10 changed files with 169 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# derby-gradle-plugin
Gradle plugin that starts and stops derby database server
25 changes: 25 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apply plugin: 'groovy'
apply plugin: 'maven'

group = 'com.qapil.gradle'

repositories {
mavenLocal()
jcenter()
}

dependencies {
compile gradleApi()
compile localGroovy()
compile 'org.apache.derby:derbynet:10.10.2.0'
compile 'org.apache.derby:derbyclient:10.10.2.0'
// compile 'org.apache.derby:derbyrun:10.10.2.0'
}

uploadArchives {
repositories {
ivy {
url = "file://$buildDir/repo"
}
}
}
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
version=0.1.0
1 change: 1 addition & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rootProject.name = 'derby-gradle-plugin'
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.qapil.gradle.plugins.derby

import org.apache.derby.drda.NetworkServerControl
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException

abstract class AbstractDerbyTask extends DefaultTask {
static final String DERBY_WRK_DIR = "derby.system.home"

String group = 'derbyDb'
String dataDir
String hostname
Integer port

protected String resolveParameters() {
if (dataDir == null || dataDir.isEmpty()) {
dataDir = project.derby.dataDir
}
if (hostname == null || hostname.isEmpty()) {
hostname = project.derby.hostname
}
if (port == null) {
port = project.derby.port
}
}

void waitForStart(NetworkServerControl nsc, int count, int sleep) {
for (int i = 0; i < count; i++) {
try {
logger.info("derby ping #" + i)
nsc.ping()
return
} catch (Exception e) {
logger.info(" derby ping failed: " + e.getMessage())
Thread.sleep(sleep)
}
}
throw new GradleException("derby server start timed out (" + (count*sleep) + " ms)")
}

void waitForShutdown(NetworkServerControl nsc, int count, int sleep) {
for (int i = 0; i < count; i++) {
try {
logger.info("derby ping #" + i)
nsc.ping()
Thread.sleep(sleep)
} catch (Exception e) {
return
}
}
throw new GradleException("derby server stop timed out (" + (count*sleep) + " ms)")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.qapil.gradle.plugins.derby

import org.gradle.api.Project

class DerbyExtension {
Project project
String dataDir = "$project.buildDir/derbydb"
String hostname = "0.0.0.0"
int port = 1527

DerbyExtension(Project project) {
this.project = project
}
}
13 changes: 13 additions & 0 deletions src/main/groovy/com/qapil/gradle/plugins/derby/DerbyPlugin.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.qapil.gradle.plugins.derby

import org.gradle.api.Plugin
import org.gradle.api.Project

class DerbyPlugin implements Plugin<Project> {

void apply(Project project) {
project.extensions.create("derby", DerbyExtension, project)
project.task('derbyStart', type: StartDerbyTask)
project.task('derbyStop', type: StopDerbyTask)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.qapil.gradle.plugins.derby

import java.net.InetAddress
import org.apache.derby.drda.NetworkServerControl
import org.gradle.api.tasks.TaskAction
import org.gradle.api.GradleException

class StartDerbyTask extends AbstractDerbyTask {

@TaskAction
void startServer() {
resolveParameters()

if (dataDir != null) {
dataDir = dataDir.trim();
if (dataDir.isEmpty()) {
dataDir = null
}
}
if (dataDir != null && !dataDir.isEmpty()) {
File dataDirFile = project.file(dataDir)
System.setProperty(DERBY_WRK_DIR, dataDirFile.getAbsolutePath())
}
try {
logger.info("Starting derby server on $hostname:$port")
def nsc = new NetworkServerControl(InetAddress.getByName(hostname), port)
nsc.start(new PrintWriter(System.out))
waitForStart(nsc, 100, 100);
} catch (Exception e) {
throw new GradleException("Cannot start derby server", e)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.qapil.gradle.plugins.derby

import java.net.InetAddress;
import org.apache.derby.drda.NetworkServerControl;
import org.gradle.api.tasks.TaskAction
import org.gradle.api.GradleException

class StopDerbyTask extends AbstractDerbyTask {

@TaskAction
void stopServer() {
resolveParameters()
if (dataDir != null && !dataDir.isEmpty()) {
File dataDirFile = project.file(dataDir)
System.setProperty(DERBY_WRK_DIR, dataDirFile.getAbsolutePath())
}
try {
logger.info("Stopping derby server on $hostname:$port")
def nsc = new NetworkServerControl(InetAddress.getByName(hostname), port)
nsc.shutdown()
waitForShutdown(nsc, 100, 100)
} catch (Exception e) {
throw new GradleException("Cannot stop derby server", e)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
implementation-class=com.qapil.gradle.plugins.derby.DerbyPlugin

0 comments on commit 2464a04

Please sign in to comment.