private DataSourceFactory updateService()

in tx-control-providers/jdbc/tx-control-provider-jdbc-xa/src/main/java/org/apache/aries/tx/control/jdbc/xa/impl/ManagedServiceFactoryImpl.java [165:210]


		private DataSourceFactory updateService(DataSourceFactory service) {
			boolean setDsf;
			synchronized (this) {
				setDsf = activeDsf == null;
				if(setDsf)
					activeDsf = service;
			}

			ServiceRegistration<JDBCConnectionProvider> reg = null;
			JDBCConnectionProviderImpl provider = null;
			if (setDsf) {
				try {
					provider = new JDBCConnectionProviderFactoryImpl(context).getProviderFor(service,
							jdbcProperties, providerProperties);
					reg = context
							.registerService(JDBCConnectionProvider.class, provider, getServiceProperties());

					ServiceRegistration<JDBCConnectionProvider> oldReg;
					AbstractJDBCConnectionProvider oldProvider;
					synchronized (this) {
						if(activeDsf == service) {
							oldReg = serviceReg;
							serviceReg = reg;
							oldProvider = this.provider;
							this.provider = provider;
						} else {
							oldReg = reg;
							oldProvider = provider;
						}
					}
					safeUnregister(oldReg);
					safeClose(oldProvider);
				} catch (Exception e) {
					LOG.error("An error occurred when creating the connection provider for {}.", pid, e);
					
					synchronized (this) {
						if(activeDsf == service) {
							activeDsf = null;
						}
					}
					safeUnregister(reg);
					safeClose(provider);
				}
			}
			return service;
		}