You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2005/05/13 18:13:37 UTC
svn commit: r170051 - in /incubator/beehive/trunk:
system-controls/src/jdbc/org/apache/beehive/controls/system/jdbc/JdbcControl.java
user/beehive-runtime.xml
Author: ekoneil
Date: Fri May 13 09:13:36 2005
New Revision: 170051
URL: http://svn.apache.org/viewcvs?rev=170051&view=rev
Log:
Two JIRA fixes:
- 721 -- remove use of deprecated controls annotation attribute. Patch from Chad Schoettger.
- 720 -- remove copy of controls JARs into webapps. Also remove the WSM runtime from the "<deploy-netui>" call. To get this runtime, call "<deploy-wsm>"
BB: self
DRT: Beehive pass / build.dist pass
Modified:
incubator/beehive/trunk/system-controls/src/jdbc/org/apache/beehive/controls/system/jdbc/JdbcControl.java
incubator/beehive/trunk/user/beehive-runtime.xml
Modified: incubator/beehive/trunk/system-controls/src/jdbc/org/apache/beehive/controls/system/jdbc/JdbcControl.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/system-controls/src/jdbc/org/apache/beehive/controls/system/jdbc/JdbcControl.java?rev=170051&r1=170050&r2=170051&view=diff
==============================================================================
--- incubator/beehive/trunk/system-controls/src/jdbc/org/apache/beehive/controls/system/jdbc/JdbcControl.java (original)
+++ incubator/beehive/trunk/system-controls/src/jdbc/org/apache/beehive/controls/system/jdbc/JdbcControl.java Fri May 13 09:13:36 2005
@@ -1,566 +1,566 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * 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.
- *
- * $Header:$
- */
-
-package org.apache.beehive.controls.system.jdbc;
-
-import org.apache.beehive.controls.api.bean.AnnotationConstraints;
-import org.apache.beehive.controls.api.bean.AnnotationMemberTypes;
-import org.apache.beehive.controls.api.bean.ControlInterface;
-import org.apache.beehive.controls.api.properties.PropertySet;
-
-import javax.naming.NamingException;
-import javax.naming.Context;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.sql.SQLData;
-import java.util.Calendar;
-
-/**
- * Simplifies access to a relational database from your Java code using SQL commands.
- * The Jdbc Control handles the work of connecting to, sending queries to, and ResultSet mapping from
- * the database. You don't need to know how to use JDBC in order to use the Jdbc Control, just basic SQL.
- * <p/>
- * To use a Jdbc Control create a .jcx file (java file with a .jcx extension) which extends this interface.
- * Add annotations to the jcx to tell the Jdbc Control how to connect to your database instance (either
- * ConnectionDataSource or ConnectionDriver), then add methods which include SQL annotations to access the database.
- */
-@ControlInterface( checkerClass = JdbcControlChecker.class )
-public interface JdbcControl {
-
-
- /**
- * Returns a database connection to the server associated
- * with the control. It is typically not necessary to call this method
- * when using the control.
- *
- * @return A Connection a database.
- */
- public Connection getConnection() throws SQLException;
-
- /**
- * Sets the Calendar instance that should be used when setting and getting
- * {@link java.sql.Date Date}, {@link java.sql.Time Time}, and
- * {@link java.sql.Timestamp Timestamp} values.
- *
- * @see java.sql.ResultSet#getDate(int, Calendar) java.sql.ResultSet#getDate(int, Calendar)
- * @see java.sql.ResultSet#getTime(int, Calendar) java.sql.ResultSet#getTime(int, Calendar)
- * @see java.sql.ResultSet#getTimestamp(int, Calendar) java.sql.ResultSet#getTimestamp(int, Calendar)
- * @see java.sql.PreparedStatement#setDate(int, java.sql.Date, Calendar) java.sql.PreparedStatement#setDate(int, Date, Calendar)
- * @see java.sql.PreparedStatement#setTime(int, java.sql.Time, Calendar) java.sql.PreparedStatement#setTime(int, Time, Calendar)
- * @see java.sql.PreparedStatement#setTimestamp(int, java.sql.Timestamp, Calendar) java.sql.PreparedStatement#setTimestamp(int, Timestamp, Calendar)
- */
- public void setDataSourceCalendar(Calendar cal);
-
- /**
- * Gets the Calendar instance used when setting and getting
- * {@link java.sql.Date Date}, {@link java.sql.Time Time}, and
- * {@link java.sql.Timestamp Timestamp} values. This is the Calendar
- * set by the setDataSourceCalendar method.
- *
- * @return The Calendar instance.
- */
- public Calendar getDataSourceCalendar();
-
-
-
-
-// ********************************************************************************************************************
-// ********************************************************************************************************************
-// Class-level Database Connection Annotations and Supporting Constructs
-// ********************************************************************************************************************
-// ********************************************************************************************************************
-
-
- /**
- * Abstract base class for a user defined Jndi Context factory which can be used
- * as a value for the jndiContextFactory member of the ConnectionDataSource
- * annotation.
- */
- public static abstract class JndiContextFactory {
-
- /**
- * Get a JNDI InitialContext instance.
- *
- * @return InitialContext instance
- * @throws NamingException if context could not be found.
- */
- public abstract Context getContext() throws NamingException;
- }
-
- /**
- * Class-level annotation for making a DataSource available for use with the Jdbc Control. Either this annotation or
- * the ConnectionDriver annotation must be set for a jcx which extends the JdbcControl interface.
- */
- @PropertySet(prefix = "ConnectionDataSource")
- @Inherited
- @AnnotationConstraints.AllowExternalOverride
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.TYPE, ElementType.FIELD})
- public @interface ConnectionDataSource {
-
- /**
- * The jndi name of the DataSource. This is a required element for this annotation.
- */
- @AnnotationMemberTypes.JndiName(resourceType = AnnotationMemberTypes.JndiName.ResourceType.DATASOURCE)
- String jndiName();
-
- /**
- * The name of a class which implements the IJndiContextFactory interface. This is an optional element of this annotation.
- */
- @AnnotationMemberTypes.Optional
- Class<? extends JndiContextFactory> jndiContextFactory() default DefaultJndiContextFactory.class;
- }
-
-
- /**
- * Class-level annotation for making a ConnectionDriver available for use with the Jdbc Control. Either this
- * annotation or the ConnectionDataSource annotation must be set for a jcx which extends the JdbcControl interface.
- * See java.sql.DatabaseConnection for additional information about the elements of this annotation.
- */
- @PropertySet(prefix = "ConnectionDriver")
- @Inherited
- @AnnotationConstraints.AllowExternalOverride
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.TYPE, ElementType.FIELD})
- public @interface ConnectionDriver {
-
- /**
- * A String containing the fully qualified name of the database driver class. Required element.
- */
- String databaseDriverClass();
-
- /**
- * A String containing the database URL to connect to. Required element.
- */
- String databaseURL();
-
- /**
- * A String containing the user name to connect to the database as. Optional element.
- */
- @AnnotationMemberTypes.Optional
- String userName() default "";
-
- /**
- * A String containing the password associated with userName. Optional element.
- */
- @AnnotationMemberTypes.Optional
- String password() default "";
-
- /**
- * A String containing a comma seperated list of name/value pairs for the DatabaseConnection. Optional element.
- */
- @AnnotationMemberTypes.Optional
- String properties() default "";
- }
-
-
- /**
- * Class level annotation used to set options on the JDBC connnection.
- */
- @PropertySet(prefix = "ConnectionOptions")
- @Inherited
- @AnnotationConstraints.AllowExternalOverride
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.TYPE, ElementType.FIELD})
- public @interface ConnectionOptions {
-
- /**
- * If set to true, database connection will optimize for read only queries, writes still permitted.
- * Optional, defaults to false.
- */
- @AnnotationMemberTypes.Optional
- boolean readOnly() default false;
-
- /**
- * Specifies ResultSet holdability for the connection. May be overridden at method level.
- * Optional, defaults to jdbc driver's default setting.
- */
- @AnnotationMemberTypes.Optional
- HoldabilityType resultSetHoldability() default HoldabilityType.DRIVER_DEFAULT;
-
- /**
- * Specifies type mappings for SQL user defined types (UDTs). Any type mappings set here will be used
- * by the underlying JDBC Connection for UDT type mappings. These mappings can be overridden by using
- * the SQL annotations methodTypeMappers element. Optional element.
- */
- @AnnotationMemberTypes.Optional
- TypeMapper[] typeMappers() default {};
- }
-
- /**
- * Class / method level annotation for mapping SQL user defined types (UDTs) to and from java objects.
- * The mapper class element must implement the java.sql.SQLData interface.
- */
- @PropertySet(prefix = "TypeMapper")
- @Inherited
- @AnnotationConstraints.AllowExternalOverride
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.TYPE, ElementType.METHOD})
- public @interface TypeMapper {
- String UDTName();
- Class<? extends SQLData> mapperClass();
- }
-
-
-
-
-// ********************************************************************************************************************
-// ********************************************************************************************************************
-// SQL Method-level Annotation and Supporting Constructs
-// ********************************************************************************************************************
-// ********************************************************************************************************************
-
- /**
- * This constant can be used as the value for the maxRows element of the SQL annotation.
- * It indicates that all rows should be returned (i.e. no limit)
- */
- public final int MAXROWS_ALL = 0;
-
- /**
- * The default fetch size for result sets, indicates the database should determine the fetch size.
- */
- public final int DEFAULT_FETCH_SIZE = 0;
-
- /**
- * Default value for the iteratorElementType element of the
- * SQL annotation. It signals that no type has been defined for the method
- * (common if the method return type isn't itself an iterator)
- */
- public interface UndefinedIteratorType {
- }
-
- /**
- * Default value for the resultSetMapper element of the
- * SQL annotation. It signals that no type has been defined for the method.
- */
- public interface UndefinedResultSetMapper {
- }
-
- /**
- * Enumeration of supported types of scrolling ResultSets
- */
- public enum ScrollType {
- DRIVER_DEFAULT (-1, -1),
- FORWARD_ONLY (ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY),
- SCROLL_INSENSITIVE (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY),
- SCROLL_SENSITIVE (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY),
- FORWARD_ONLY_UPDATABLE (ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE),
- SCROLL_INSENSITIVE_UPDATABLE (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE),
- SCROLL_SENSITIVE_UPDATABLE (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
-
- private final int _type;
- private final int _concurrencyType;
-
- ScrollType(int scrollType, int concurrencyType) {
- _type = scrollType;
- _concurrencyType = concurrencyType;
- }
-
- public int getType() { return _type; }
-
- public int getConcurrencyType() { return _concurrencyType; }
-
- public String toString() {
- StringBuilder sb = new StringBuilder();
- if (_type == ResultSet.TYPE_FORWARD_ONLY) {
- sb.append("Foward Only, ");
- } else if (_type == ResultSet.TYPE_SCROLL_INSENSITIVE) {
- sb.append("Scroll Insensitive, ");
- } else if (_type == ResultSet.TYPE_SCROLL_SENSITIVE) {
- sb.append("Scroll Sensitive, ");
- } else {
- sb.append("Jdbc Driver Default Direction");
- }
-
- if (_concurrencyType == ResultSet.CONCUR_READ_ONLY) {
- sb.append("Read Only");
- } else if (_concurrencyType == ResultSet.CONCUR_UPDATABLE) {
- sb.append("Updatable");
- } else {
- sb.append("Jdbc Driver Default");
- }
- return sb.toString();
- }
- }
-
- /**
- * Enumeration of supported fetch directions.
- */
- public enum FetchDirection {
- FORWARD (ResultSet.FETCH_FORWARD),
- REVERSE (ResultSet.FETCH_REVERSE),
- UNKNOWN (ResultSet.FETCH_UNKNOWN);
-
- private final int _direction;
-
- FetchDirection(int direction) {
- _direction = direction;
- }
-
- public int getDirection() { return _direction; }
- }
-
- /**
- * Enumeration of supported fetch directions.
- */
- public enum HoldabilityType {
- DRIVER_DEFAULT (0),
- HOLD_CURSORS (ResultSet.HOLD_CURSORS_OVER_COMMIT),
- CLOSE_CURSORS (ResultSet.CLOSE_CURSORS_AT_COMMIT);
-
- private final int _holdability;
-
- HoldabilityType(int holdability) {
- _holdability = holdability;
- }
-
- public int getHoldability() { return _holdability; }
-
- public String toString() {
- if (_holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT) {
- return "HOLD_CURSORS_OVER_COMMIT";
- } else if (_holdability == ResultSet.CLOSE_CURSORS_AT_COMMIT) {
- return "CLOSE_CURSORS_AT_COMMIT";
- } else {
- return "Default driver holdability";
- }
- }
- }
-
- /**
- * Method-level annotation for methods in a jcx which wish to access a database instance.
- */
- @PropertySet(prefix = "SQL")
- @Inherited
- @Retention(RetentionPolicy.RUNTIME)
- @AnnotationConstraints.AllowExternalOverride
- @Target({ElementType.METHOD})
- public @interface SQL {
-
- /**
- * The SQL statement to send to the database. Required annotation element.
- */
- String statement();
-
-
- /**
- * Maximum array length.
- * This element has no effect on the call unless the method return type is an array.
- * Optional element.
- */
- @AnnotationMemberTypes.Optional
- int arrayMaxLength() default 1024;
-
-
- /**
- * Max number of ResultSet rows to return.
- * If used with arrayMaxLength the smaller value is used.
- * Optional element, default value is no limit on number of rows returned.
- */
- @AnnotationMemberTypes.Optional
- int maxRows() default MAXROWS_ALL;
-
-
- /**
- * Execute the SQL statement as a batch update.
- * Methods which have this element set to true must return an array of ints.
- * Optional element, defaults to false.
- */
- @AnnotationMemberTypes.Optional
- boolean batchUpdate() default false;
-
-
- /**
- * Specify the fetch size for the ResultSet. Optional element, defaults to 0.
- */
- @AnnotationMemberTypes.Optional
- int fetchSize() default DEFAULT_FETCH_SIZE;
-
-
- /**
- * Specify the fetch direction for the ResultSEt. Optional element, defaults to FORWARD.
- */
- @AnnotationMemberTypes.Optional
- FetchDirection fetchDirection() default FetchDirection.FORWARD;
-
-
- /**
- * Return the generated key values generated by the SQL statement. Optional element, defaults to false.
- */
- @AnnotationMemberTypes.Optional
- boolean getGeneratedKeys() default false;
-
-
- /**
- * Specify generated key columns by column names to return when the getGeneratedKeys element is true.
- * May only be set if getGeneratedKeys is set to true, otherwise a compile time error is generated.
- * Optional element.
- */
- @AnnotationMemberTypes.Optional
- String[] generatedKeyColumnNames() default {};
-
-
- /**
- * Specify generated key columns by column number to return when the getGeneratedKeys element is true.
- * May only be set if getGeneratedKeys is set to true, otherwise a compile time error is generated
- * Optional element.
- */
- @AnnotationMemberTypes.Optional
- int[] generatedKeyColumnIndexes() default {};
-
-
- /**
- * Specify the holdability type for the annotated method. Overrides the holability annotation element
- * of the ConnectionOptions annotation. The holdability type will be in effect for the duration of this
- * method call. Optional, defaults to DRIVER_DEFAULT.
- */
- @AnnotationMemberTypes.Optional
- HoldabilityType resultSetHoldabilityOverride() default HoldabilityType.DRIVER_DEFAULT;
-
-
- /**
- * Specifies type mappings for SQL user defined types (UDTs). Any type mappings set here will be used
- * by the underlying JDBC Connection for UDT type mappings. These type mappings will REPLACE any set on
- * the JDBC connection for the duration of the method call. Optional element.
- */
- @AnnotationMemberTypes.Optional
- TypeMapper[] typeMappersOverride() default {};
-
-
- /**
- * Specify the type of element to be interated over when the method's return type is java.util.Iterator.
- * Optional element.
- */
- @AnnotationMemberTypes.Optional
- Class iteratorElementType() default UndefinedIteratorType.class;
-
-
- /**
- * Specify a custom result set mapper for the ResultSet generated by the SQL statement.
- * ResultSet mappers must extend the ResultSetMapper abstract base class. If a value is specified
- * it will be used to map the ResultSet of the query to the return type of the method.
- * See org.apache.beehive.controls.system.jdbc.ResultSetMapper for additional information.
- * Optional element.
- */
- @AnnotationMemberTypes.Optional
- Class resultSetMapper() default UndefinedResultSetMapper.class;
-
-
- /**
- * Specify that the ResultSet returned by the method is scrollable. Valid only for methods which
- * return a ResultSet, otherwise a compile-time error will occur. Valid element values
- * are defined by the ScrollType enumeration.
- * Optional element, defaults to JDBC driver's default setting.
- */
- @AnnotationMemberTypes.Optional
- ScrollType scrollableResultSet() default ScrollType.DRIVER_DEFAULT;
- } // SQL annotation declaration
-
-
-// ********************************************************************************************************************
-// ********************************************************************************************************************
-// Inner Classes
-// ********************************************************************************************************************
-// ********************************************************************************************************************
-
- /**
- * Nested class used for specifing parameters for a callable statement. If a method in a .jcx takes an array of
- * SQLParameter, the JdbcControl treats the SQL as a CallableStatement and inserts values into the statement from
- * the SQLParameter array. After the CallableStatement executes, results are mapped into OUT type parameters found
- * int the SQLParameter array.
- * NOTE: To invoke a callable statement which does not take any arguments, an SQLParameter array of size zero must
- * be passed to the JDBCControl method.
- */
- public static class SQLParameter {
- /**
- * IN direction constant.
- */
- public static final int IN = 1;
- /**
- * OUT direction constant.
- */
- public static final int OUT = 2;
- /**
- * IN and OUT directions constant.
- */
- public static final int INOUT = IN | OUT;
-
- /**
- * Parameter value. For parameters of type OUT this value should be set to null.
- */
- public Object value = null;
-
- /**
- * Parameter SQL data type. See java.sql.Types.
- */
- public int type = Types.NULL;
-
- /**
- * Parameter direction.
- */
- public int dir = IN;
-
- /**
- * Create a new SQLParameter with the specified value.
- *
- * @param value The parameter value.
- */
- public SQLParameter(Object value) {
- this.value = value;
- }
-
- /**
- * Create a new SQLParameter with the specified value and SQL data type.
- *
- * @param value The parameter value.
- * @param type SQL data type.
- */
- public SQLParameter(Object value, int type) {
- this(value);
- this.type = type;
- }
-
- /**
- * Create a new SQLParameter with the specified value, SQL data type and direction.
- *
- * @param value The parameter value.
- * @param type SQL data type.
- * @param dir IN / OUT or INOUT
- */
- public SQLParameter(Object value, int type, int dir) {
- this(value, type);
- this.dir = dir;
- }
-
- /**
- * Clone this parameter.
- *
- * @return A copy of this parameter.
- */
- public Object clone() {
- return new SQLParameter(value, type, dir);
- }
- }
-}
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * 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.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.controls.system.jdbc;
+
+import org.apache.beehive.controls.api.bean.AnnotationConstraints;
+import org.apache.beehive.controls.api.bean.AnnotationMemberTypes;
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.PropertySet;
+
+import javax.naming.NamingException;
+import javax.naming.Context;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.sql.SQLData;
+import java.util.Calendar;
+
+/**
+ * Simplifies access to a relational database from your Java code using SQL commands.
+ * The Jdbc Control handles the work of connecting to, sending queries to, and ResultSet mapping from
+ * the database. You don't need to know how to use JDBC in order to use the Jdbc Control, just basic SQL.
+ * <p/>
+ * To use a Jdbc Control create a .jcx file (java file with a .jcx extension) which extends this interface.
+ * Add annotations to the jcx to tell the Jdbc Control how to connect to your database instance (either
+ * ConnectionDataSource or ConnectionDriver), then add methods which include SQL annotations to access the database.
+ */
+@ControlInterface( checker = JdbcControlChecker.class )
+public interface JdbcControl {
+
+
+ /**
+ * Returns a database connection to the server associated
+ * with the control. It is typically not necessary to call this method
+ * when using the control.
+ *
+ * @return A Connection a database.
+ */
+ public Connection getConnection() throws SQLException;
+
+ /**
+ * Sets the Calendar instance that should be used when setting and getting
+ * {@link java.sql.Date Date}, {@link java.sql.Time Time}, and
+ * {@link java.sql.Timestamp Timestamp} values.
+ *
+ * @see java.sql.ResultSet#getDate(int, Calendar) java.sql.ResultSet#getDate(int, Calendar)
+ * @see java.sql.ResultSet#getTime(int, Calendar) java.sql.ResultSet#getTime(int, Calendar)
+ * @see java.sql.ResultSet#getTimestamp(int, Calendar) java.sql.ResultSet#getTimestamp(int, Calendar)
+ * @see java.sql.PreparedStatement#setDate(int, java.sql.Date, Calendar) java.sql.PreparedStatement#setDate(int, Date, Calendar)
+ * @see java.sql.PreparedStatement#setTime(int, java.sql.Time, Calendar) java.sql.PreparedStatement#setTime(int, Time, Calendar)
+ * @see java.sql.PreparedStatement#setTimestamp(int, java.sql.Timestamp, Calendar) java.sql.PreparedStatement#setTimestamp(int, Timestamp, Calendar)
+ */
+ public void setDataSourceCalendar(Calendar cal);
+
+ /**
+ * Gets the Calendar instance used when setting and getting
+ * {@link java.sql.Date Date}, {@link java.sql.Time Time}, and
+ * {@link java.sql.Timestamp Timestamp} values. This is the Calendar
+ * set by the setDataSourceCalendar method.
+ *
+ * @return The Calendar instance.
+ */
+ public Calendar getDataSourceCalendar();
+
+
+
+
+// ********************************************************************************************************************
+// ********************************************************************************************************************
+// Class-level Database Connection Annotations and Supporting Constructs
+// ********************************************************************************************************************
+// ********************************************************************************************************************
+
+
+ /**
+ * Abstract base class for a user defined Jndi Context factory which can be used
+ * as a value for the jndiContextFactory member of the ConnectionDataSource
+ * annotation.
+ */
+ public static abstract class JndiContextFactory {
+
+ /**
+ * Get a JNDI InitialContext instance.
+ *
+ * @return InitialContext instance
+ * @throws NamingException if context could not be found.
+ */
+ public abstract Context getContext() throws NamingException;
+ }
+
+ /**
+ * Class-level annotation for making a DataSource available for use with the Jdbc Control. Either this annotation or
+ * the ConnectionDriver annotation must be set for a jcx which extends the JdbcControl interface.
+ */
+ @PropertySet(prefix = "ConnectionDataSource")
+ @Inherited
+ @AnnotationConstraints.AllowExternalOverride
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ElementType.TYPE, ElementType.FIELD})
+ public @interface ConnectionDataSource {
+
+ /**
+ * The jndi name of the DataSource. This is a required element for this annotation.
+ */
+ @AnnotationMemberTypes.JndiName(resourceType = AnnotationMemberTypes.JndiName.ResourceType.DATASOURCE)
+ String jndiName();
+
+ /**
+ * The name of a class which implements the IJndiContextFactory interface. This is an optional element of this annotation.
+ */
+ @AnnotationMemberTypes.Optional
+ Class<? extends JndiContextFactory> jndiContextFactory() default DefaultJndiContextFactory.class;
+ }
+
+
+ /**
+ * Class-level annotation for making a ConnectionDriver available for use with the Jdbc Control. Either this
+ * annotation or the ConnectionDataSource annotation must be set for a jcx which extends the JdbcControl interface.
+ * See java.sql.DatabaseConnection for additional information about the elements of this annotation.
+ */
+ @PropertySet(prefix = "ConnectionDriver")
+ @Inherited
+ @AnnotationConstraints.AllowExternalOverride
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ElementType.TYPE, ElementType.FIELD})
+ public @interface ConnectionDriver {
+
+ /**
+ * A String containing the fully qualified name of the database driver class. Required element.
+ */
+ String databaseDriverClass();
+
+ /**
+ * A String containing the database URL to connect to. Required element.
+ */
+ String databaseURL();
+
+ /**
+ * A String containing the user name to connect to the database as. Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ String userName() default "";
+
+ /**
+ * A String containing the password associated with userName. Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ String password() default "";
+
+ /**
+ * A String containing a comma seperated list of name/value pairs for the DatabaseConnection. Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ String properties() default "";
+ }
+
+
+ /**
+ * Class level annotation used to set options on the JDBC connnection.
+ */
+ @PropertySet(prefix = "ConnectionOptions")
+ @Inherited
+ @AnnotationConstraints.AllowExternalOverride
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ElementType.TYPE, ElementType.FIELD})
+ public @interface ConnectionOptions {
+
+ /**
+ * If set to true, database connection will optimize for read only queries, writes still permitted.
+ * Optional, defaults to false.
+ */
+ @AnnotationMemberTypes.Optional
+ boolean readOnly() default false;
+
+ /**
+ * Specifies ResultSet holdability for the connection. May be overridden at method level.
+ * Optional, defaults to jdbc driver's default setting.
+ */
+ @AnnotationMemberTypes.Optional
+ HoldabilityType resultSetHoldability() default HoldabilityType.DRIVER_DEFAULT;
+
+ /**
+ * Specifies type mappings for SQL user defined types (UDTs). Any type mappings set here will be used
+ * by the underlying JDBC Connection for UDT type mappings. These mappings can be overridden by using
+ * the SQL annotations methodTypeMappers element. Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ TypeMapper[] typeMappers() default {};
+ }
+
+ /**
+ * Class / method level annotation for mapping SQL user defined types (UDTs) to and from java objects.
+ * The mapper class element must implement the java.sql.SQLData interface.
+ */
+ @PropertySet(prefix = "TypeMapper")
+ @Inherited
+ @AnnotationConstraints.AllowExternalOverride
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ElementType.TYPE, ElementType.METHOD})
+ public @interface TypeMapper {
+ String UDTName();
+ Class<? extends SQLData> mapperClass();
+ }
+
+
+
+
+// ********************************************************************************************************************
+// ********************************************************************************************************************
+// SQL Method-level Annotation and Supporting Constructs
+// ********************************************************************************************************************
+// ********************************************************************************************************************
+
+ /**
+ * This constant can be used as the value for the maxRows element of the SQL annotation.
+ * It indicates that all rows should be returned (i.e. no limit)
+ */
+ public final int MAXROWS_ALL = 0;
+
+ /**
+ * The default fetch size for result sets, indicates the database should determine the fetch size.
+ */
+ public final int DEFAULT_FETCH_SIZE = 0;
+
+ /**
+ * Default value for the iteratorElementType element of the
+ * SQL annotation. It signals that no type has been defined for the method
+ * (common if the method return type isn't itself an iterator)
+ */
+ public interface UndefinedIteratorType {
+ }
+
+ /**
+ * Default value for the resultSetMapper element of the
+ * SQL annotation. It signals that no type has been defined for the method.
+ */
+ public interface UndefinedResultSetMapper {
+ }
+
+ /**
+ * Enumeration of supported types of scrolling ResultSets
+ */
+ public enum ScrollType {
+ DRIVER_DEFAULT (-1, -1),
+ FORWARD_ONLY (ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY),
+ SCROLL_INSENSITIVE (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY),
+ SCROLL_SENSITIVE (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY),
+ FORWARD_ONLY_UPDATABLE (ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE),
+ SCROLL_INSENSITIVE_UPDATABLE (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE),
+ SCROLL_SENSITIVE_UPDATABLE (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
+
+ private final int _type;
+ private final int _concurrencyType;
+
+ ScrollType(int scrollType, int concurrencyType) {
+ _type = scrollType;
+ _concurrencyType = concurrencyType;
+ }
+
+ public int getType() { return _type; }
+
+ public int getConcurrencyType() { return _concurrencyType; }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ if (_type == ResultSet.TYPE_FORWARD_ONLY) {
+ sb.append("Foward Only, ");
+ } else if (_type == ResultSet.TYPE_SCROLL_INSENSITIVE) {
+ sb.append("Scroll Insensitive, ");
+ } else if (_type == ResultSet.TYPE_SCROLL_SENSITIVE) {
+ sb.append("Scroll Sensitive, ");
+ } else {
+ sb.append("Jdbc Driver Default Direction");
+ }
+
+ if (_concurrencyType == ResultSet.CONCUR_READ_ONLY) {
+ sb.append("Read Only");
+ } else if (_concurrencyType == ResultSet.CONCUR_UPDATABLE) {
+ sb.append("Updatable");
+ } else {
+ sb.append("Jdbc Driver Default");
+ }
+ return sb.toString();
+ }
+ }
+
+ /**
+ * Enumeration of supported fetch directions.
+ */
+ public enum FetchDirection {
+ FORWARD (ResultSet.FETCH_FORWARD),
+ REVERSE (ResultSet.FETCH_REVERSE),
+ UNKNOWN (ResultSet.FETCH_UNKNOWN);
+
+ private final int _direction;
+
+ FetchDirection(int direction) {
+ _direction = direction;
+ }
+
+ public int getDirection() { return _direction; }
+ }
+
+ /**
+ * Enumeration of supported fetch directions.
+ */
+ public enum HoldabilityType {
+ DRIVER_DEFAULT (0),
+ HOLD_CURSORS (ResultSet.HOLD_CURSORS_OVER_COMMIT),
+ CLOSE_CURSORS (ResultSet.CLOSE_CURSORS_AT_COMMIT);
+
+ private final int _holdability;
+
+ HoldabilityType(int holdability) {
+ _holdability = holdability;
+ }
+
+ public int getHoldability() { return _holdability; }
+
+ public String toString() {
+ if (_holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT) {
+ return "HOLD_CURSORS_OVER_COMMIT";
+ } else if (_holdability == ResultSet.CLOSE_CURSORS_AT_COMMIT) {
+ return "CLOSE_CURSORS_AT_COMMIT";
+ } else {
+ return "Default driver holdability";
+ }
+ }
+ }
+
+ /**
+ * Method-level annotation for methods in a jcx which wish to access a database instance.
+ */
+ @PropertySet(prefix = "SQL")
+ @Inherited
+ @Retention(RetentionPolicy.RUNTIME)
+ @AnnotationConstraints.AllowExternalOverride
+ @Target({ElementType.METHOD})
+ public @interface SQL {
+
+ /**
+ * The SQL statement to send to the database. Required annotation element.
+ */
+ String statement();
+
+
+ /**
+ * Maximum array length.
+ * This element has no effect on the call unless the method return type is an array.
+ * Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ int arrayMaxLength() default 1024;
+
+
+ /**
+ * Max number of ResultSet rows to return.
+ * If used with arrayMaxLength the smaller value is used.
+ * Optional element, default value is no limit on number of rows returned.
+ */
+ @AnnotationMemberTypes.Optional
+ int maxRows() default MAXROWS_ALL;
+
+
+ /**
+ * Execute the SQL statement as a batch update.
+ * Methods which have this element set to true must return an array of ints.
+ * Optional element, defaults to false.
+ */
+ @AnnotationMemberTypes.Optional
+ boolean batchUpdate() default false;
+
+
+ /**
+ * Specify the fetch size for the ResultSet. Optional element, defaults to 0.
+ */
+ @AnnotationMemberTypes.Optional
+ int fetchSize() default DEFAULT_FETCH_SIZE;
+
+
+ /**
+ * Specify the fetch direction for the ResultSEt. Optional element, defaults to FORWARD.
+ */
+ @AnnotationMemberTypes.Optional
+ FetchDirection fetchDirection() default FetchDirection.FORWARD;
+
+
+ /**
+ * Return the generated key values generated by the SQL statement. Optional element, defaults to false.
+ */
+ @AnnotationMemberTypes.Optional
+ boolean getGeneratedKeys() default false;
+
+
+ /**
+ * Specify generated key columns by column names to return when the getGeneratedKeys element is true.
+ * May only be set if getGeneratedKeys is set to true, otherwise a compile time error is generated.
+ * Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ String[] generatedKeyColumnNames() default {};
+
+
+ /**
+ * Specify generated key columns by column number to return when the getGeneratedKeys element is true.
+ * May only be set if getGeneratedKeys is set to true, otherwise a compile time error is generated
+ * Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ int[] generatedKeyColumnIndexes() default {};
+
+
+ /**
+ * Specify the holdability type for the annotated method. Overrides the holability annotation element
+ * of the ConnectionOptions annotation. The holdability type will be in effect for the duration of this
+ * method call. Optional, defaults to DRIVER_DEFAULT.
+ */
+ @AnnotationMemberTypes.Optional
+ HoldabilityType resultSetHoldabilityOverride() default HoldabilityType.DRIVER_DEFAULT;
+
+
+ /**
+ * Specifies type mappings for SQL user defined types (UDTs). Any type mappings set here will be used
+ * by the underlying JDBC Connection for UDT type mappings. These type mappings will REPLACE any set on
+ * the JDBC connection for the duration of the method call. Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ TypeMapper[] typeMappersOverride() default {};
+
+
+ /**
+ * Specify the type of element to be interated over when the method's return type is java.util.Iterator.
+ * Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ Class iteratorElementType() default UndefinedIteratorType.class;
+
+
+ /**
+ * Specify a custom result set mapper for the ResultSet generated by the SQL statement.
+ * ResultSet mappers must extend the ResultSetMapper abstract base class. If a value is specified
+ * it will be used to map the ResultSet of the query to the return type of the method.
+ * See org.apache.beehive.controls.system.jdbc.ResultSetMapper for additional information.
+ * Optional element.
+ */
+ @AnnotationMemberTypes.Optional
+ Class resultSetMapper() default UndefinedResultSetMapper.class;
+
+
+ /**
+ * Specify that the ResultSet returned by the method is scrollable. Valid only for methods which
+ * return a ResultSet, otherwise a compile-time error will occur. Valid element values
+ * are defined by the ScrollType enumeration.
+ * Optional element, defaults to JDBC driver's default setting.
+ */
+ @AnnotationMemberTypes.Optional
+ ScrollType scrollableResultSet() default ScrollType.DRIVER_DEFAULT;
+ } // SQL annotation declaration
+
+
+// ********************************************************************************************************************
+// ********************************************************************************************************************
+// Inner Classes
+// ********************************************************************************************************************
+// ********************************************************************************************************************
+
+ /**
+ * Nested class used for specifing parameters for a callable statement. If a method in a .jcx takes an array of
+ * SQLParameter, the JdbcControl treats the SQL as a CallableStatement and inserts values into the statement from
+ * the SQLParameter array. After the CallableStatement executes, results are mapped into OUT type parameters found
+ * int the SQLParameter array.
+ * NOTE: To invoke a callable statement which does not take any arguments, an SQLParameter array of size zero must
+ * be passed to the JDBCControl method.
+ */
+ public static class SQLParameter {
+ /**
+ * IN direction constant.
+ */
+ public static final int IN = 1;
+ /**
+ * OUT direction constant.
+ */
+ public static final int OUT = 2;
+ /**
+ * IN and OUT directions constant.
+ */
+ public static final int INOUT = IN | OUT;
+
+ /**
+ * Parameter value. For parameters of type OUT this value should be set to null.
+ */
+ public Object value = null;
+
+ /**
+ * Parameter SQL data type. See java.sql.Types.
+ */
+ public int type = Types.NULL;
+
+ /**
+ * Parameter direction.
+ */
+ public int dir = IN;
+
+ /**
+ * Create a new SQLParameter with the specified value.
+ *
+ * @param value The parameter value.
+ */
+ public SQLParameter(Object value) {
+ this.value = value;
+ }
+
+ /**
+ * Create a new SQLParameter with the specified value and SQL data type.
+ *
+ * @param value The parameter value.
+ * @param type SQL data type.
+ */
+ public SQLParameter(Object value, int type) {
+ this(value);
+ this.type = type;
+ }
+
+ /**
+ * Create a new SQLParameter with the specified value, SQL data type and direction.
+ *
+ * @param value The parameter value.
+ * @param type SQL data type.
+ * @param dir IN / OUT or INOUT
+ */
+ public SQLParameter(Object value, int type, int dir) {
+ this(value, type);
+ this.dir = dir;
+ }
+
+ /**
+ * Clone this parameter.
+ *
+ * @return A copy of this parameter.
+ */
+ public Object clone() {
+ return new SQLParameter(value, type, dir);
+ }
+ }
+}
Modified: incubator/beehive/trunk/user/beehive-runtime.xml
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/user/beehive-runtime.xml?rev=170051&r1=170050&r2=170051&view=diff
==============================================================================
--- incubator/beehive/trunk/user/beehive-runtime.xml (original)
+++ incubator/beehive/trunk/user/beehive-runtime.xml Fri May 13 09:13:36 2005
@@ -33,12 +33,11 @@
<fileset dir="../lib/common">
<include name="*.jar"/>
<exclude name="commons-cli*.jar"/>
+ <exclude name="velocity-*.jar"/>
</fileset>
<fileset dir="../lib/controls">
<include name="*.jar"/>
- </fileset>
- <fileset dir="../lib/wsm">
- <include name="*.jar"/>
+ <exclude name="beehive-*-control.jar"/>
</fileset>
</copy>
@@ -62,6 +61,7 @@
</fileset>
<fileset dir="../lib/controls">
<include name="*.jar"/>
+ <exclude name="beehive-*-control.jar"/>
</fileset>
<fileset dir="../lib/wsm/">
<include name="*.jar"/>
@@ -78,9 +78,11 @@
<copy todir="${dest.dir}">
<fileset dir="../lib/common">
<include name="commons-discovery-0.2.jar"/>
+ <exclude name="commons-cli*.jar"/>
</fileset>
<fileset dir="../lib/controls">
<include name="beehive-controls.jar"/>
+ <exclude name="beehive-*-control.jar"/>
</fileset>
</copy>
</target>