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;
}