if (classValue == null || classValue.asString().equals(Object.class.getName())) {
throw new IllegalArgumentException("@DataSourceDefinition annotations must provide a driver class name.");
}
final String type = classValue.asString();
final DirectDataSourceDescription desc = new DirectDataSourceDescription();
desc.setClassName(type);
desc.setDatabaseName(asString(annotation, DATABASE_NAME_PROP));
desc.setDescription(asString(annotation, DESCRIPTION_PROP));
desc.setInitialPoolSize(asInt(annotation, INITIAL_POOL_SIZE_PROP));
desc.setIsolationLevel(asInt(annotation, ISOLATION_LEVEL_PROP));
desc.setLoginTimeout(asInt(annotation, LOGIN_TIMEOUT_PROP));
desc.setMaxIdleTime(asInt(annotation, MAX_IDLE_TIME_PROP));
desc.setMaxStatements(asInt(annotation, MAX_STATEMENTS_PROP));
desc.setMaxPoolSize(asInt(annotation, MAX_POOL_SIZE_PROP));
desc.setMinPoolSize(asInt(annotation, MIN_POOL_SIZE_PROP));
desc.setPassword(asString(annotation, PASSWORD_PROP));
desc.setPortNumber(asInt(annotation, PORT_NUMBER_PROP));
desc.setProperties(asArray(annotation, PROPERTIES_PROP));
desc.setServerName(asString(annotation, SERVER_NAME_PROP));
desc.setTransactional(asBool(annotation, TRANSACTIONAL_PROP));
desc.setUrl(asString(annotation, URL_PROP));
desc.setUser(asString(annotation, USER_PROP));
final BindingDescription bindingDescription = new BindingDescription(name);
bindingDescription.setDependency(true);
bindingDescription.setBindingType(type);