/* * JBoss, Home of Professional Open Source. * Copyright 2006, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.resource.metadata.mcf; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.jboss.managed.api.annotation.ManagementProperty; import org.jboss.managed.api.annotation.ManagementPropertyFactory; import org.jboss.resource.deployers.management.ConnectionFactoryProperty; /** * A DataSourceDeploymentMetaData. * * @author <a href="weston.price@jboss.org">Weston Price</a> * @version $Revision: 105425 $ */ public class DataSourceDeploymentMetaData extends ManagedConnectionFactoryDeploymentMetaData implements JDBCProviderSupport { /** The serialVersionUID */ private static final long serialVersionUID = 1440129014410015366L; private static final String CONNECTION_DEFINITION = "javax.sql.DataSource"; private static final String RAR_NAME = "jboss-local-jdbc.rar"; @XmlElement(name="transaction-isolation") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String transactionIsolation; @XmlElement(name="user-name") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String userName; @XmlElement(name="password") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String passWord; @XmlElement(name="new-connection-sql") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String newConnectionSQL; @XmlElement(name="check-valid-connection-sql") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String checkValidConnectionSQL; @XmlElement(name="valid-connection-checker-class-name") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String validConnectionCheckerClassName; @XmlElement(name="exception-sorter-class-name") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String exceptionSorterClassName; @XmlElement(name="stale-connection-checker-class-name") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String staleConnectionCheckerClassName; @XmlElement(name="track-statements") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String trackStatements; @XmlElement(name="prepared-statement-cache-size") private int preparedStatementCacheSize = 0; @XmlElement(name="share-prepared-statements") private boolean sharePreparedStatements; @XmlElement(name="set-tx-query-timeout") private boolean useQueryTimeout; @XmlElement(name="query-timeout") private int queryTimeout; @XmlElement(name="use-try-lock") private Integer useTryLock; @XmlElement(name="url-delimiter") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String urlDelimiter; @XmlElement(name="url-selector-strategy-class-name") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) private String urlSelectorStrategyClassName; public DataSourceDeploymentMetaData() { setConnectionDefinition(CONNECTION_DEFINITION); setRarName(RAR_NAME); } @ManagementProperty(name="transaction-isolation", description="The DataSource transaction isolation level", includeInTemplate=true) public String getTransactionIsolation() { return transactionIsolation; } public void setTransactionIsolation(String transactionIsolation) { this.transactionIsolation = transactionIsolation; } @ManagementProperty(name="password", description="The DataSource password", includeInTemplate=true) public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } @ManagementProperty(name="user-name", description="The DataSource username", includeInTemplate=true) public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @ManagementProperty(name="check-valid-connection-sql", description="The SQL statement to validate a connection", includeInTemplate=true) public String getCheckValidConnectionSQL() { return checkValidConnectionSQL; } public void setCheckValidConnectionSQL(String checkValidConnectionSQL) { this.checkValidConnectionSQL = checkValidConnectionSQL; } @ManagementProperty(name="exception-sorter-class-name", description="The exception sorter class name", includeInTemplate=true) public String getExceptionSorterClassName() { return exceptionSorterClassName; } public void setExceptionSorterClassName(String exceptionSorterClassName) { this.exceptionSorterClassName = exceptionSorterClassName; } @ManagementProperty(name="new-connection-sql", description="The new connection SQL", includeInTemplate=true) public String getNewConnectionSQL() { return newConnectionSQL; } public void setNewConnectionSQL(String newConnectionSQL) { this.newConnectionSQL = newConnectionSQL; } @ManagementProperty(name="valid-connection-checker-class-name", description="The DataSource connection checker class name", includeInTemplate=true) public String getValidConnectionCheckerClassName() { return validConnectionCheckerClassName; } public void setValidConnectionCheckerClassName(String validConnectionCheckerClassName) { this.validConnectionCheckerClassName = validConnectionCheckerClassName; } @ManagementProperty(name="stale-connection-checker-class-name", description="The DataSource stale connection checker class name", includeInTemplate=true) public String getStaleConnectionCheckerClassName() { return staleConnectionCheckerClassName; } public void setStaleConnectionCheckerClassName(String staleConnectionCheckerClassName) { this.staleConnectionCheckerClassName = staleConnectionCheckerClassName; } @ManagementProperty(name="url-delimiter", description="The DataSource url delimiter", includeInTemplate=true) public String getURLDelimiter() { return urlDelimiter; } public void setURLDelimiter(String urlDelimiter) { this.urlDelimiter = urlDelimiter; } @ManagementProperty(name="url-selector-strategy-class-name", description="The DataSource url selector strategy class name", includeInTemplate=true) public String getURLSelectorStrategyClassName() { return urlSelectorStrategyClassName; } public void setURLSelectorStrategyClassName(String urlSelectorStrategyClassName) { this.urlSelectorStrategyClassName = urlSelectorStrategyClassName; } @ManagementProperty(name="prepared-statement-cache-size", description="The DataSource prepared statement cache size", includeInTemplate=true) public int getPreparedStatementCacheSize() { return preparedStatementCacheSize; } public void setPreparedStatementCacheSize(int preparedStatementCacheSize) { this.preparedStatementCacheSize = preparedStatementCacheSize; } @ManagementProperty(name="query-timeout", description="The query timeout", includeInTemplate=true) public int getQueryTimeout() { return queryTimeout; } public void setQueryTimeout(int queryTimeout) { this.queryTimeout = queryTimeout; } @ManagementProperty(name="use-try-lock", description="The internal lock timeout", includeInTemplate=true) public Integer getUseTryLock() { return useTryLock; } public void setUseTryLock(Integer useTryLock) { this.useTryLock = useTryLock; } @ManagementProperty(name="share-prepared-statements", description="Should prepared statements be shared", includeInTemplate=true) public boolean isSharePreparedStatements() { return sharePreparedStatements; } public void setSharePreparedStatements(boolean sharePreparedStatements) { this.sharePreparedStatements = sharePreparedStatements; } @ManagementProperty(name="track-statements", description="The track statements method", includeInTemplate=true) public String getTrackStatements() { return trackStatements; } public void setTrackStatements(String trackStatements) { this.trackStatements = trackStatements; } @ManagementProperty(name="set-tx-query-timeout", description="Should query timeout be enabled", includeInTemplate=true) public boolean isUseQueryTimeout() { return useQueryTimeout; } public void setUseQueryTimeout(boolean useQueryTimeout) { this.useQueryTimeout = useQueryTimeout; } @Override @ManagementProperty(name="config-property", description="The connection factory property info", managed=true, readOnly = true) @ManagementPropertyFactory(ConnectionFactoryProperty.class) public List<ManagedConnectionFactoryPropertyMetaData> getManagedConnectionFactoryProperties() { List<ManagedConnectionFactoryPropertyMetaData> properties = new ArrayList<ManagedConnectionFactoryPropertyMetaData>(); ManagedConnectionFactoryPropertyMetaData property = null; if(getUserName() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("UserName"); property.setValue(getUserName()); properties.add(property); } if(getPassWord() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("Password"); property.setValue(getPassWord()); properties.add(property); } if(getTransactionIsolation() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("TransactionIsolation"); property.setValue(getTransactionIsolation()); properties.add(property); } if(getNewConnectionSQL() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("NewConnectionSQL"); property.setValue(getNewConnectionSQL()); properties.add(property); } if(getCheckValidConnectionSQL() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("CheckValidConnectionSQL"); property.setValue(getCheckValidConnectionSQL()); properties.add(property); } if(getValidConnectionCheckerClassName() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("ValidConnectionCheckerClassName"); property.setValue(getValidConnectionCheckerClassName()); properties.add(property); } if(getExceptionSorterClassName() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("ExceptionSorterClassName"); property.setValue(getExceptionSorterClassName()); properties.add(property); } if(getStaleConnectionCheckerClassName() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("StaleConnectionCheckerClassName"); property.setValue(getStaleConnectionCheckerClassName()); properties.add(property); } if(getURLSelectorStrategyClassName() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("URLSelectorStrategyClassName"); property.setValue(getURLSelectorStrategyClassName()); properties.add(property); } if(getURLDelimiter() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("URLDelimiter"); property.setValue(getURLDelimiter()); properties.add(property); } property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("PreparedStatementCacheSize"); property.setType("int"); property.setValue(String.valueOf(getPreparedStatementCacheSize())); properties.add(property); property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("SharePreparedStatements"); property.setType("boolean"); property.setValue(String.valueOf(isSharePreparedStatements())); properties.add(property); property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("QueryTimeout"); property.setType("int"); property.setValue(String.valueOf(getQueryTimeout())); properties.add(property); property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("UseTryLock"); property.setType("java.lang.Integer"); property.setValue(String.valueOf(getUseTryLock())); properties.add(property); property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("TransactionQueryTimeout"); property.setType("boolean"); property.setValue(String.valueOf(isUseQueryTimeout())); properties.add(property); property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("ValidateOnMatch"); property.setType("boolean"); property.setValue(String.valueOf(isValidateOnMatch())); properties.add(property); if (getTrackStatements() != null) { property = new ManagedConnectionFactoryPropertyMetaData(); property.setName("TrackStatements"); property.setType("java.lang.String"); property.setValue(String.valueOf(getTrackStatements())); properties.add(property); } return properties; } }