in tx-control-providers/jpa/tx-control-provider-jpa-common/src/main/java/org/apache/aries/tx/control/jpa/common/impl/AbstractManagedJPAEMFLocator.java [221:265]
public void removedService(ServiceReference<EntityManagerFactoryBuilder> reference, EntityManagerFactoryBuilder service) {
boolean emfbLeft;
ServiceRegistration<JPAEntityManagerProvider> oldReg = null;
AbstractJPAEntityManagerProvider toClose = null;
synchronized (this) {
emfbLeft = activeEMFB.compareAndSet(service, null);
if (emfbLeft) {
toClose = providerObject.get();
oldReg = serviceReg.getAndSet(null);
}
}
if (oldReg != null) {
try {
oldReg.unregister();
} catch (IllegalStateException ise) {
LOG.debug("An exception occurred when unregistering a service for {}", pid);
}
}
if(toClose != null) {
try {
toClose.close();
} catch (Exception e) {
LOG.debug("An Exception occured when closing the Resource provider for {}", pid, e);
}
}
try {
context.ungetService(reference);
} catch (IllegalStateException ise) {
LOG.debug("An exception occurred when ungetting the service for {}", reference);
}
if (emfbLeft) {
ServiceReference<EntityManagerFactoryBuilder> newEMFBuilderRef = emfBuilderTracker
.getServiceReference();
if (newEMFBuilderRef != null) {
EntityManagerFactoryBuilder newEMFBuilder = emfBuilderTracker.getService(newEMFBuilderRef);
if(newEMFBuilder != null) {
updateService(newEMFBuilderRef, newEMFBuilder);
}
}
}
}