datasources-agroal/src/main/java/org/wildfly/extension/datasources/agroal/deployment/DataSourceDefinitionInjectionSource.java
@Override
    public void getResourceValue(ResolutionContext context, ServiceBuilder<?> serviceBuilder, DeploymentPhaseContext phaseContext, Injector<ManagedReferenceFactory> injector) throws DeploymentUnitProcessingException {

        AgroalConnectionFactoryConfigurationSupplier connectionFactoryConfiguration = new AgroalConnectionFactoryConfigurationSupplier();

        try {
            Class<?> providerClass = phaseContext.getDeploymentUnit().getAttachment(MODULE).getClassLoader().loadClass(className);
            if (providerClass != null && !DataSource.class.isAssignableFrom(providerClass) && !Driver.class.isAssignableFrom(providerClass)) {
                throw AgroalLogger.SERVICE_LOGGER.invalidDeploymentConnectionProvider();
            }
            connectionFactoryConfiguration.connectionProviderClass(providerClass);
        } catch (ClassNotFoundException e) {
            throw AgroalLogger.SERVICE_LOGGER.loadClassDeploymentException(e, className);
        }
        for (Map.Entry<String, String> property : properties.entrySet()) {
            connectionFactoryConfiguration.jdbcProperty(property.getKey(), property.getValue());
        }
        if (databaseName != null && !databaseName.isEmpty()) {
            connectionFactoryConfiguration.jdbcProperty(DATABASE_NAME_PROP, databaseName);
        }
        if (description != null && !description.isEmpty()) {
            connectionFactoryConfiguration.jdbcProperty(DESCRIPTION_PROP, description);
        }
        if (serverName != null && !serverName.isEmpty()) {
            connectionFactoryConfiguration.jdbcProperty(SERVER_NAME_PROP, serverName);
        }
        if (portNumber >= 0) {
            connectionFactoryConfiguration.jdbcProperty(PORT_NUMBER_PROP, Integer.toString(portNumber));
        }
        if (loginTimeout >= 0) {
            connectionFactoryConfiguration.jdbcProperty(LOGIN_TIMEOUT_PROP, Integer.toString(loginTimeout));
        }
        if (maxStatements >= 0) {
            connectionFactoryConfiguration.jdbcProperty(MAX_STATEMENTS_PROP, Integer.toString(maxStatements));
        }

        if (url != null && !url.isEmpty()) {
            connectionFactoryConfiguration.jdbcUrl(url);
        }
        if (user != null && !user.isEmpty()) {
            connectionFactoryConfiguration.principal(new NamePrincipal(user));
        }
        if (password != null && !password.isEmpty()) {
            connectionFactoryConfiguration.credential(new SimplePassword(password));
        }
        connectionFactoryConfiguration.jdbcTransactionIsolation(AgroalConnectionFactoryConfiguration.TransactionIsolation.fromLevel(isolationLevel));

        AgroalConnectionPoolConfigurationSupplier connectionPoolConfiguration = new AgroalConnectionPoolConfigurationSupplier();
        connectionPoolConfiguration.connectionFactoryConfiguration(connectionFactoryConfiguration);

        if (initialPoolSize >= 0) {
            connectionPoolConfiguration.initialSize(initialPoolSize);
        }
        if (minPoolSize >= 0) {
            connectionPoolConfiguration.minSize(minPoolSize);
        }
        if (maxPoolSize >= 0) {
            connectionPoolConfiguration.maxSize(maxPoolSize);
        }
        if (maxIdleTime >= 0) {
            connectionPoolConfiguration.reapTimeout(Duration.ofSeconds(maxIdleTime));
        }

        AgroalDataSourceConfigurationSupplier dataSourceConfiguration = new AgroalDataSourceConfigurationSupplier();
        dataSourceConfiguration.connectionPoolConfiguration(connectionPoolConfiguration);

        ContextNames.BindInfo bindInfo = ContextNames.bindInfoForEnvEntry(context.getApplicationName(), context.getModuleName(), context.getComponentName(), !context.isCompUsesModule(), jndiName);
        ServiceName dataSourceServiceName = DATASOURCE_DEFINITION_SERVICE_PREFIX.append(bindInfo.getBinderServiceName().getCanonicalName());

        // This is the service responsible for the JNDI binding, with a dependency on the datasource service that acts as a ManagedReferenceFactory and is used as the injection source
        BinderService binderService = new BinderService(bindInfo.getBindName(), this);
        phaseContext.getServiceTarget().addService(bindInfo.getBinderServiceName(), binderService)
                    .addDependency(dataSourceServiceName, ManagedReferenceFactory.class, binderService.getManagedObjectInjector())
                    .addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, binderService.getNamingStoreInjector())
                    .install();

        ServiceBuilder svcBuilder = phaseContext.getServiceTarget().addService(dataSourceServiceName);
        Supplier<TransactionSynchronizationRegistry> tsrSupplier = null;
        if (transactional) {
            CapabilityServiceSupport css = phaseContext.getDeploymentUnit().getAttachment(Attachments.CAPABILITY_SERVICE_SUPPORT);
            ServiceName tsrName = css.getCapabilityServiceName("org.wildfly.transactions.transaction-synchronization-registry");
            //noinspection unchecked
            tsrSupplier = (Supplier<TransactionSynchronizationRegistry>) svcBuilder.requires(tsrName);
        }
        DataSourceDefinitionService dataSourceService = new DataSourceDefinitionService(bindInfo, transactional, dataSourceConfiguration, tsrSupplier);
        svcBuilder.setInstance(dataSourceService).install();

        serviceBuilder.requires(bindInfo.getBinderServiceName());
        serviceBuilder.addDependency(dataSourceServiceName, ManagedReferenceFactory.class, injector);
    }
@Override
    public void getResourceValue(ResolutionContext context, ServiceBuilder<?> serviceBuilder, DeploymentPhaseContext phaseContext, Injector<ManagedReferenceFactory> injector) throws DeploymentUnitProcessingException {

        AgroalConnectionFactoryConfigurationSupplier connectionFactoryConfiguration = new AgroalConnectionFactoryConfigurationSupplier();

        try {
            Class<?> providerClass = phaseContext.getDeploymentUnit().getAttachment(MODULE).getClassLoader().loadClass(className);
            if (providerClass != null && !DataSource.class.isAssignableFrom(providerClass) && !Driver.class.isAssignableFrom(providerClass)) {
                throw AgroalLogger.SERVICE_LOGGER.invalidDeploymentConnectionProvider();
            }
            connectionFactoryConfiguration.connectionProviderClass(providerClass);
        } catch (ClassNotFoundException e) {
            throw AgroalLogger.SERVICE_LOGGER.loadClassDeploymentException(e, className);
        }
        for (Map.Entry<String, String> property : properties.entrySet()) {
            connectionFactoryConfiguration.jdbcProperty(property.getKey(), property.getValue());
        }
        if (databaseName != null && !databaseName.isEmpty()) {
            connectionFactoryConfiguration.jdbcProperty(DATABASE_NAME_PROP, databaseName);
        }
        if (description != null && !description.isEmpty()) {
            connectionFactoryConfiguration.jdbcProperty(DESCRIPTION_PROP, description);
        }
        if (serverName != null && !serverName.isEmpty()) {
            connectionFactoryConfiguration.jdbcProperty(SERVER_NAME_PROP, serverName);
        }
        if (portNumber >= 0) {
            connectionFactoryConfiguration.jdbcProperty(PORT_NUMBER_PROP, Integer.toString(portNumber));
        }
        if (loginTimeout >= 0) {
            connectionFactoryConfiguration.jdbcProperty(LOGIN_TIMEOUT_PROP, Integer.toString(loginTimeout));
        }
        if (maxStatements >= 0) {
            connectionFactoryConfiguration.jdbcProperty(MAX_STATEMENTS_PROP, Integer.toString(maxStatements));
        }

        if (url != null && !url.isEmpty()) {
            connectionFactoryConfiguration.jdbcUrl(url);
        }
        if (user != null && !user.isEmpty()) {
            connectionFactoryConfiguration.principal(new NamePrincipal(user));
        }
        if (password != null && !password.isEmpty()) {
            connectionFactoryConfiguration.credential(new SimplePassword(password));
        }
        connectionFactoryConfiguration.jdbcTransactionIsolation(AgroalConnectionFactoryConfiguration.TransactionIsolation.fromLevel(isolationLevel));

        AgroalConnectionPoolConfigurationSupplier connectionPoolConfiguration = new AgroalConnectionPoolConfigurationSupplier();
        connectionPoolConfiguration.connectionFactoryConfiguration(connectionFactoryConfiguration);

        if (initialPoolSize >= 0) {
            connectionPoolConfiguration.initialSize(initialPoolSize);
        }
        if (minPoolSize >= 0) {
            connectionPoolConfiguration.minSize(minPoolSize);
        }
        if (maxPoolSize >= 0) {
            connectionPoolConfiguration.maxSize(maxPoolSize);
        }
        if (maxIdleTime >= 0) {
            connectionPoolConfiguration.reapTimeout(Duration.ofSeconds(maxIdleTime));
        }

        AgroalDataSourceConfigurationSupplier dataSourceConfiguration = new AgroalDataSourceConfigurationSupplier();
        dataSourceConfiguration.connectionPoolConfiguration(connectionPoolConfiguration);

        ContextNames.BindInfo bindInfo = ContextNames.bindInfoForEnvEntry(context.getApplicationName(), context.getModuleName(), context.getComponentName(), !context.isCompUsesModule(), jndiName);
        ServiceName dataSourceServiceName = DATASOURCE_DEFINITION_SERVICE_PREFIX.append(bindInfo.getBinderServiceName().getCanonicalName());

        // This is the service responsible for the JNDI binding, with a dependency on the datasource service that acts as a ManagedReferenceFactory and is used as the injection source
        BinderService binderService = new BinderService(bindInfo.getBindName(), this);
        phaseContext.getServiceTarget().addService(bindInfo.getBinderServiceName(), binderService)
                    .addDependency(dataSourceServiceName, ManagedReferenceFactory.class, binderService.getManagedObjectInjector())
                    .addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, binderService.getNamingStoreInjector())
                    .install();

        ServiceBuilder svcBuilder = phaseContext.getServiceTarget().addService(dataSourceServiceName);
        Supplier<TransactionSynchronizationRegistry> tsrSupplier = null;
        if (transactional) {
            CapabilityServiceSupport css = phaseContext.getDeploymentUnit().getAttachment(Attachments.CAPABILITY_SERVICE_SUPPORT);
            ServiceName tsrName = css.getCapabilityServiceName("org.wildfly.transactions.transaction-synchronization-registry");
            //noinspection unchecked
            tsrSupplier = (Supplier<TransactionSynchronizationRegistry>) svcBuilder.requires(tsrName);
        }
        DataSourceDefinitionService dataSourceService = new DataSourceDefinitionService(bindInfo, transactional, dataSourceConfiguration, tsrSupplier);
        svcBuilder.setInstance(dataSourceService).install();

        serviceBuilder.requires(bindInfo.getBinderServiceName());
        serviceBuilder.addDependency(dataSourceServiceName, ManagedReferenceFactory.class, injector);
    }
@ Override public void getResourceValue ( ResolutionContext context , ServiceBuilder < ? > serviceBuilder , DeploymentPhaseContext phaseContext , Injector < ManagedReferenceFactory > injector ) throws DeploymentUnitProcessingException { AgroalConnectionFactoryConfigurationSupplier connectionFactoryConfiguration = new AgroalConnectionFactoryConfigurationSupplier ( ) ; try { Class < ? > providerClass = phaseContext . getDeploymentUnit ( ) . getAttachment ( MODULE ) . getClassLoader ( ) . loadClass ( className ) ; if ( providerClass != null && ! DataSource . class . isAssignableFrom ( providerClass ) && ! Driver . class . isAssignableFrom ( providerClass ) ) { throw AgroalLogger . SERVICE_LOGGER . invalidDeploymentConnectionProvider ( ) ; } connectionFactoryConfiguration . connectionProviderClass ( providerClass ) ; } catch ( ClassNotFoundException e ) { throw AgroalLogger . SERVICE_LOGGER . loadClassDeploymentException ( e , className ) ; } for ( Map . Entry < String , String > property : properties . entrySet ( ) ) { connectionFactoryConfiguration . jdbcProperty ( property . getKey ( ) , property . getValue ( ) ) ; } if ( databaseName != null && ! databaseName . isEmpty ( ) ) { connectionFactoryConfiguration . jdbcProperty ( DATABASE_NAME_PROP , databaseName ) ; } if ( description != null && ! description . isEmpty ( ) ) { connectionFactoryConfiguration . jdbcProperty ( DESCRIPTION_PROP , description ) ; } if ( serverName != null && ! serverName . isEmpty ( ) ) { connectionFactoryConfiguration . jdbcProperty ( SERVER_NAME_PROP , serverName ) ; } if ( portNumber >= 0 ) { connectionFactoryConfiguration . jdbcProperty ( PORT_NUMBER_PROP , Integer . toString ( portNumber ) ) ; } if ( loginTimeout >= 0 ) { connectionFactoryConfiguration . jdbcProperty ( LOGIN_TIMEOUT_PROP , Integer . toString ( loginTimeout ) ) ; } if ( maxStatements >= 0 ) { connectionFactoryConfiguration . jdbcProperty ( MAX_STATEMENTS_PROP , Integer . toString ( maxStatements ) ) ; } if ( url != null && ! url . isEmpty ( ) ) { connectionFactoryConfiguration . jdbcUrl ( url ) ; } if ( user != null && ! user . isEmpty ( ) ) { connectionFactoryConfiguration . principal ( new NamePrincipal ( user ) ) ; } if ( password != null && ! password . isEmpty ( ) ) { connectionFactoryConfiguration . credential ( new SimplePassword ( password ) ) ; } connectionFactoryConfiguration . jdbcTransactionIsolation ( AgroalConnectionFactoryConfiguration . TransactionIsolation . fromLevel ( isolationLevel ) ) ; AgroalConnectionPoolConfigurationSupplier connectionPoolConfiguration = new AgroalConnectionPoolConfigurationSupplier ( ) ; connectionPoolConfiguration . connectionFactoryConfiguration ( connectionFactoryConfiguration ) ; if ( initialPoolSize >= 0 ) { connectionPoolConfiguration . initialSize ( initialPoolSize ) ; } if ( minPoolSize >= 0 ) { connectionPoolConfiguration . minSize ( minPoolSize ) ; } if ( maxPoolSize >= 0 ) { connectionPoolConfiguration . maxSize ( maxPoolSize ) ; } if ( maxIdleTime >= 0 ) { connectionPoolConfiguration . reapTimeout ( Duration . ofSeconds ( maxIdleTime ) ) ; } AgroalDataSourceConfigurationSupplier dataSourceConfiguration = new AgroalDataSourceConfigurationSupplier ( ) ; dataSourceConfiguration . connectionPoolConfiguration ( connectionPoolConfiguration ) ; ContextNames . BindInfo bindInfo = ContextNames . bindInfoForEnvEntry ( context . getApplicationName ( ) , context . getModuleName ( ) , context . getComponentName ( ) , ! context . isCompUsesModule ( ) , jndiName ) ; ServiceName dataSourceServiceName = DATASOURCE_DEFINITION_SERVICE_PREFIX . append ( bindInfo . getBinderServiceName ( ) . getCanonicalName ( ) ) ; // This is the service responsible for the JNDI binding, with a dependency on the datasource service that acts as a ManagedReferenceFactory and is used as the injection source BinderService binderService = new BinderService ( bindInfo . getBindName ( ) , this ) ; phaseContext . getServiceTarget ( ) . addService ( bindInfo . getBinderServiceName ( ) , binderService ) . addDependency ( dataSourceServiceName , ManagedReferenceFactory . class , binderService . getManagedObjectInjector ( ) ) . addDependency ( bindInfo . getParentContextServiceName ( ) , ServiceBasedNamingStore . class , binderService . getNamingStoreInjector ( ) ) . install ( ) ; ServiceBuilder svcBuilder = phaseContext . getServiceTarget ( ) . addService ( dataSourceServiceName ) ; Supplier < TransactionSynchronizationRegistry > tsrSupplier = null ; if ( transactional ) { CapabilityServiceSupport css = phaseContext . getDeploymentUnit ( ) . getAttachment ( Attachments . CAPABILITY_SERVICE_SUPPORT ) ; ServiceName tsrName = css . getCapabilityServiceName ( "org.wildfly.transactions.transaction-synchronization-registry" ) ; //noinspection unchecked tsrSupplier = ( Supplier < TransactionSynchronizationRegistry > ) svcBuilder . requires ( tsrName ) ; } DataSourceDefinitionService dataSourceService = new DataSourceDefinitionService ( bindInfo , transactional , dataSourceConfiguration , tsrSupplier ) ; svcBuilder . setInstance ( dataSourceService ) . install ( ) ; serviceBuilder . requires ( bindInfo . getBinderServiceName ( ) ) ; serviceBuilder . addDependency ( dataSourceServiceName , ManagedReferenceFactory . class , injector ) ; }
--- //
--- //