# Annotation Interface DataSourceDefinition

@Target(TYPE) @Retention(RUNTIME) @Repeatable(DataSourceDefinitions.class) public @interface DataSourceDefinition
Defines a data source for dependency injection via the `Resource` annotation. This annotation allows developers to declaratively specify the properties of a JDBC data source, including connection details, pool sizing, and transactional behavior. The container creates and manages the data source based on the specified configuration, making it available for injection into application components.

Since:
  Common Annotations 1.1

## Required Element Summary

Required Elements
Modifier and Type
Required Element
Description
`String`
`className`
Specifies the fully qualified class name of the JDBC driver or the Jakarta Connector connection factory class that implements this data source.
`String`
`name`
Specifies the JNDI name under which the data source will be registered.

## Optional Element Summary

Optional Elements
Modifier and Type
Optional Element
Description
`String`
`databaseName`
Specifies the name of the database to connect to.
`String`
`description`
Provides a human-readable description of the data source for documentation and administrative purposes.
`int`
`initialPoolSize`
Specifies the number of connections to create when the connection pool is initialized.
`int`
`isolationLevel`
Specifies the transaction isolation level for connections from this data source, using the constants defined in `Connection`.
`int`
`loginTimeout`
Specifies the maximum time in seconds that the driver will wait when attempting to connect to the database.
`int`
`maxIdleTime`
Specifies the maximum idle time in seconds before a connection is closed and removed from the pool.
`int`
`maxPoolSize`
Specifies the maximum number of connections that the pool may create.
`int`
`maxStatements`
Specifies the maximum number of prepared statements that may be cached per connection in the pool.
`int`
`minPoolSize`
Specifies the minimum number of connections that the pool must maintain.
`String`
`password`
Specifies the password for the database user account used to establish connections.
`int`
`portNumber`
Specifies the network port number on which the database server is listening.
`String[]`
`properties`
Specifies additional connection properties in the form "name=value" strings.
`String`
`serverName`
Specifies the host name or IP address of the database server.
`boolean`
`transactional`
Indicates whether connections from this data source support container-managed transactions.
`String`
`url`
Specifies the JDBC connection URL for the database.
`String`
`user`
Specifies the database user name used to establish connections.

## Element Details

### className

String className
Specifies the fully qualified class name of the JDBC driver or the Jakarta Connector connection factory class that implements this data source.

Returns:
  the fully qualified class name of the data source implementation

### name

String name
Specifies the JNDI name under which the data source will be registered. This is the lookup name used for dependency injection or explicit JNDI lookup of the data source.

Returns:
  the JNDI name for the data source

### description

String description
Provides a human-readable description of the data source for documentation and administrative purposes.

Returns:
  the description of the data source

Default:
  `""`

### url

String url
Specifies the JDBC connection URL for the database. This URL is used by the driver to establish connections to the database server.

Returns:
  the JDBC connection URL

Default:
  `""`

### user

String user
Specifies the database user name used to establish connections.

Returns:
  the database user name

Default:
  `""`

### password

String password
Specifies the password for the database user account used to establish connections.

Returns:
  the database password

Default:
  `""`

### databaseName

String databaseName
Specifies the name of the database to connect to. This is used in conjunction with the server name and port number to locate the target database.

Returns:
  the database name

Default:
  `""`

### portNumber

int portNumber
Specifies the network port number on which the database server is listening. A value of -1 indicates the default port for the database type.

Returns:
  the database server port number, or -1 for the default

Default:
  `-1`

### serverName

String serverName
Specifies the host name or IP address of the database server.

Returns:
  the database server host name, defaulting to "localhost"

Default:
  `"localhost"`

### isolationLevel

int isolationLevel
Specifies the transaction isolation level for connections from this data source, using the constants defined in `Connection`. A value of -1 indicates the database default isolation level should be used.

Returns:
  the transaction isolation level, or -1 for the database default

Default:
  `-1`

### transactional

boolean transactional
Indicates whether connections from this data source support container-managed transactions. When true, the data source participates in Jakarta Transactions.

Returns:
  true if the data source participates in container-managed transactions

Default:
  `true`

### initialPoolSize

int initialPoolSize
Specifies the number of connections to create when the connection pool is initialized. A value of -1 indicates the container default should be used.

Returns:
  the initial number of connections in the pool, or -1 for default

Default:
  `-1`

### maxPoolSize

int maxPoolSize
Specifies the maximum number of connections that the pool may create. A value of -1 indicates the container default should be used.

Returns:
  the maximum pool size, or -1 for the container default

Default:
  `-1`

### minPoolSize

int minPoolSize
Specifies the minimum number of connections that the pool must maintain. A value of -1 indicates the container default should be used.

Returns:
  the minimum pool size, or -1 for the container default

Default:
  `-1`

### maxIdleTime

int maxIdleTime
Specifies the maximum idle time in seconds before a connection is closed and removed from the pool. A value of -1 indicates no idle timeout.

Returns:
  the maximum idle time in seconds, or -1 for no timeout

Default:
  `-1`

### maxStatements

int maxStatements
Specifies the maximum number of prepared statements that may be cached per connection in the pool. A value of -1 indicates the container default.

Returns:
  the maximum cached prepared statements per connection, or -1 for default

Default:
  `-1`

### properties

String[] properties
Specifies additional connection properties in the form "name=value" strings. These properties are passed to the JDBC driver during connection establishment.

Returns:
  the array of additional connection properties

Default:
  `{}`

### loginTimeout

int loginTimeout
Specifies the maximum time in seconds that the driver will wait when attempting to connect to the database. A value of 0 means no timeout.

Returns:
  the login timeout in seconds, or 0 for no timeout

Default:
  `0`