/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.openejb.config.typed;
import org.apache.openejb.config.sys.Resource;
import org.apache.openejb.config.typed.util.Builders;
import org.apache.openejb.config.typed.util.DurationAdapter;
import org.apache.openejb.util.Duration;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.net.URI;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "DataSource")
public class DataSourceBuilder extends Resource {
@XmlAttribute
private String serviceId;
@XmlAttribute
private String definition;
@XmlAttribute
private boolean jtaManaged = true;
@XmlAttribute
private String jdbcDriver = "org.hsqldb.jdbcDriver";
@XmlAttribute
private URI jdbcUrl = URI.create("jdbc:hsqldb:mem:hsqldb");
@XmlAttribute
private String userName = "sa";
@XmlAttribute
private String password;
@XmlAttribute
private String passwordCipher = "PlainText";
@XmlAttribute
private String connectionProperties;
@XmlAttribute
private boolean defaultAutoCommit = true;
@XmlAttribute
private String defaultReadOnly;
@XmlAttribute
private int initialSize;
@XmlAttribute
private int maxActive = 20;
@XmlAttribute
private int maxIdle = 20;
@XmlAttribute
private int minIdle;
@XmlJavaTypeAdapter(DurationAdapter.class)
@XmlAttribute
private Duration maxWaitTime = Duration.parse("-1 millisecond");
@XmlAttribute
private String validationQuery;
@XmlAttribute
private boolean testOnBorrow = true;
@XmlAttribute
private boolean testOnReturn;
@XmlAttribute
private boolean testWhileIdle;
@XmlJavaTypeAdapter(DurationAdapter.class)
@XmlAttribute
private Duration timeBetweenEvictionRuns = Duration.parse("-1 millisecond");
@XmlAttribute
private int numTestsPerEvictionRun = 3;
@XmlJavaTypeAdapter(DurationAdapter.class)
@XmlAttribute
private Duration minEvictableIdleTime = Duration.parse("30 minutes");
@XmlAttribute
private boolean poolPreparedStatements;
@XmlAttribute
private int maxOpenPreparedStatements;
@XmlAttribute
private boolean accessToUnderlyingConnectionAllowed;
@XmlAttribute
private boolean ignoreDefaultValues;
public DataSourceBuilder() {
setClassName("org.apache.openejb.resource.jdbc.DataSourceFactory");
setType("javax.sql.DataSource");
setId("DataSource");
setConstructor("serviceId, jtaManaged, jdbcDriver, definition, maxWaitTime, timeBetweenEvictionRuns, minEvictableIdleTime, OpenEJBResourceClasspath");
setFactoryName("create");
}
public DataSourceBuilder id(final String id) {
setId(id);
return this;
}
public DataSourceBuilder withServiceId(final String serviceId) {
this.serviceId = serviceId;
return this;
}
public void setServiceId(final String serviceId) {
this.serviceId = serviceId;
}
public String getServiceId() {
return serviceId;
}
public DataSourceBuilder withDefinition(final String definition) {
this.definition = definition;
return this;
}
public void setDefinition(final String definition) {
this.definition = definition;
}
public String getDefinition() {
return definition;
}
public DataSourceBuilder withJtaManaged(final boolean jtaManaged) {
this.jtaManaged = jtaManaged;
return this;
}
public void setJtaManaged(final boolean jtaManaged) {
this.jtaManaged = jtaManaged;
}
public boolean getJtaManaged() {
return jtaManaged;
}
public DataSourceBuilder withJdbcDriver(final String jdbcDriver) {
this.jdbcDriver = jdbcDriver;
return this;
}
public void setJdbcDriver(final String jdbcDriver) {
this.jdbcDriver = jdbcDriver;
}
public String getJdbcDriver() {
return jdbcDriver;
}
public DataSourceBuilder withJdbcUrl(final URI jdbcUrl) {
this.jdbcUrl = jdbcUrl;
return this;
}
public void setJdbcUrl(final URI jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
public URI getJdbcUrl() {
return jdbcUrl;
}
public DataSourceBuilder withUserName(final String userName) {
this.userName = userName;
return this;
}
public void setUserName(final String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public DataSourceBuilder withPassword(final String password) {
this.password = password;
return this;
}
public void setPassword(final String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public DataSourceBuilder withPasswordCipher(final String passwordCipher) {
this.passwordCipher = passwordCipher;
return this;
}
public void setPasswordCipher(final String passwordCipher) {
this.passwordCipher = passwordCipher;
}
public String getPasswordCipher() {
return passwordCipher;
}
public DataSourceBuilder withConnectionProperties(final String connectionProperties) {
this.connectionProperties = connectionProperties;
return this;
}
public void setConnectionProperties(final String connectionProperties) {
this.connectionProperties = connectionProperties;
}
public String getConnectionProperties() {
return connectionProperties;
}
public DataSourceBuilder withDefaultAutoCommit(final boolean defaultAutoCommit) {
this.defaultAutoCommit = defaultAutoCommit;
return this;
}
public void setDefaultAutoCommit(final boolean defaultAutoCommit) {
this.defaultAutoCommit = defaultAutoCommit;
}
public boolean getDefaultAutoCommit() {
return defaultAutoCommit;
}
public DataSourceBuilder withDefaultReadOnly(final String defaultReadOnly) {
this.defaultReadOnly = defaultReadOnly;
return this;
}
public void setDefaultReadOnly(final String defaultReadOnly) {
this.defaultReadOnly = defaultReadOnly;
}
public String getDefaultReadOnly() {
return defaultReadOnly;
}
public DataSourceBuilder withInitialSize(final int initialSize) {
this.initialSize = initialSize;
return this;
}
public void setInitialSize(final int initialSize) {
this.initialSize = initialSize;
}
public int getInitialSize() {
return initialSize;
}
public DataSourceBuilder withMaxActive(final int maxActive) {
this.maxActive = maxActive;
return this;
}
public void setMaxActive(final int maxActive) {
this.maxActive = maxActive;
}
public int getMaxActive() {
return maxActive;
}
public DataSourceBuilder withMaxIdle(final int maxIdle) {
this.maxIdle = maxIdle;
return this;
}
public void setMaxIdle(final int maxIdle) {
this.maxIdle = maxIdle;
}
public int getMaxIdle() {
return maxIdle;
}
public DataSourceBuilder withMinIdle(final int minIdle) {
this.minIdle = minIdle;
return this;
}
public void setMinIdle(final int minIdle) {
this.minIdle = minIdle;
}
public int getMinIdle() {
return minIdle;
}
public DataSourceBuilder withMaxWaitTime(final Duration maxWaitTime) {
this.maxWaitTime = maxWaitTime;
return this;
}
public void setMaxWaitTime(final Duration maxWaitTime) {
this.maxWaitTime = maxWaitTime;
}
public Duration getMaxWaitTime() {
return maxWaitTime;
}
public DataSourceBuilder withMaxWaitTime(final long time, final TimeUnit unit) {
return withMaxWaitTime(new Duration(time, unit));
}
public void setMaxWaitTime(final long time, final TimeUnit unit) {
setMaxWaitTime(new Duration(time, unit));
}
public DataSourceBuilder withValidationQuery(final String validationQuery) {
this.validationQuery = validationQuery;
return this;
}
public void setValidationQuery(final String validationQuery) {
this.validationQuery = validationQuery;
}
public String getValidationQuery() {
return validationQuery;
}
public DataSourceBuilder withTestOnBorrow(final boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
return this;
}
public void setTestOnBorrow(final boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}
public boolean getTestOnBorrow() {
return testOnBorrow;
}
public DataSourceBuilder withTestOnReturn(final boolean testOnReturn) {
this.testOnReturn = testOnReturn;
return this;
}
public void setTestOnReturn(final boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}
public boolean getTestOnReturn() {
return testOnReturn;
}
public DataSourceBuilder withTestWhileIdle(final boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
return this;
}
public void setTestWhileIdle(final boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}
public boolean getTestWhileIdle() {
return testWhileIdle;
}
public DataSourceBuilder withTimeBetweenEvictionRuns(final Duration timeBetweenEvictionRuns) {
this.timeBetweenEvictionRuns = timeBetweenEvictionRuns;
return this;
}
public void setTimeBetweenEvictionRuns(final Duration timeBetweenEvictionRuns) {
this.timeBetweenEvictionRuns = timeBetweenEvictionRuns;
}
public Duration getTimeBetweenEvictionRuns() {
return timeBetweenEvictionRuns;
}
public DataSourceBuilder withTimeBetweenEvictionRuns(final long time, final TimeUnit unit) {
return withTimeBetweenEvictionRuns(new Duration(time, unit));
}
public void setTimeBetweenEvictionRuns(final long time, final TimeUnit unit) {
setTimeBetweenEvictionRuns(new Duration(time, unit));
}
public DataSourceBuilder withNumTestsPerEvictionRun(final int numTestsPerEvictionRun) {
this.numTestsPerEvictionRun = numTestsPerEvictionRun;
return this;
}
public void setNumTestsPerEvictionRun(final int numTestsPerEvictionRun) {
this.numTestsPerEvictionRun = numTestsPerEvictionRun;
}
public int getNumTestsPerEvictionRun() {
return numTestsPerEvictionRun;
}
public DataSourceBuilder withMinEvictableIdleTime(final Duration minEvictableIdleTime) {
this.minEvictableIdleTime = minEvictableIdleTime;
return this;
}
public void setMinEvictableIdleTime(final Duration minEvictableIdleTime) {
this.minEvictableIdleTime = minEvictableIdleTime;
}
public Duration getMinEvictableIdleTime() {
return minEvictableIdleTime;
}
public DataSourceBuilder withMinEvictableIdleTime(final long time, final TimeUnit unit) {
return withMinEvictableIdleTime(new Duration(time, unit));
}
public void setMinEvictableIdleTime(final long time, final TimeUnit unit) {
setMinEvictableIdleTime(new Duration(time, unit));
}
public DataSourceBuilder withPoolPreparedStatements(final boolean poolPreparedStatements) {
this.poolPreparedStatements = poolPreparedStatements;
return this;
}
public void setPoolPreparedStatements(final boolean poolPreparedStatements) {
this.poolPreparedStatements = poolPreparedStatements;
}
public boolean getPoolPreparedStatements() {
return poolPreparedStatements;
}
public DataSourceBuilder withMaxOpenPreparedStatements(final int maxOpenPreparedStatements) {
this.maxOpenPreparedStatements = maxOpenPreparedStatements;
return this;
}
public void setMaxOpenPreparedStatements(final int maxOpenPreparedStatements) {
this.maxOpenPreparedStatements = maxOpenPreparedStatements;
}
public int getMaxOpenPreparedStatements() {
return maxOpenPreparedStatements;
}
public DataSourceBuilder withAccessToUnderlyingConnectionAllowed(final boolean accessToUnderlyingConnectionAllowed) {
this.accessToUnderlyingConnectionAllowed = accessToUnderlyingConnectionAllowed;
return this;
}
public void setAccessToUnderlyingConnectionAllowed(final boolean accessToUnderlyingConnectionAllowed) {
this.accessToUnderlyingConnectionAllowed = accessToUnderlyingConnectionAllowed;
}
public boolean getAccessToUnderlyingConnectionAllowed() {
return accessToUnderlyingConnectionAllowed;
}
public DataSourceBuilder withIgnoreDefaultValues(final boolean ignoreDefaultValues) {
this.ignoreDefaultValues = ignoreDefaultValues;
return this;
}
public void setIgnoreDefaultValues(final boolean ignoreDefaultValues) {
this.ignoreDefaultValues = ignoreDefaultValues;
}
public boolean getIgnoreDefaultValues() {
return ignoreDefaultValues;
}
public Properties getProperties() {
return Builders.getProperties(this);
}
}