![JAR search and dependency download from the Maven repository](/logo.png)
de.mhus.osgi.jwsbridge.impl.JavaWebServiceAdminImpl Maven / Gradle / Ivy
package de.mhus.osgi.jwsbridge.impl;
import java.util.LinkedList;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.component.ComponentContext;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
import aQute.bnd.annotation.component.Activate;
import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.Deactivate;
import de.mhus.osgi.jwsbridge.JavaWebService;
import de.mhus.osgi.jwsbridge.JavaWebServiceAdmin;
import de.mhus.osgi.jwsbridge.WebServiceInfo;
@Component(name=JavaWebServiceAdmin.NAME,immediate=true)
public class JavaWebServiceAdminImpl implements JavaWebServiceAdmin {
private LinkedList list = new LinkedList<>();
private BundleContext context;
private ServiceTracker tracker;
@Activate
public void doActivate(ComponentContext ctx) {
this.context = ctx.getBundleContext();
tracker = new ServiceTracker(context, JavaWebService.class, new WSCustomizer() );
tracker.open();
}
@Deactivate
public void doDeactivate(ComponentContext ctx) {
tracker.close();
synchronized (list) {
for (WebServiceInfoImpl info: list)
info.disconnect();
list.clear();
}
}
@Override
public WebServiceInfo[] getWebServices() {
synchronized (list) {
return list.toArray(new WebServiceInfo[list.size()]);
}
}
@Override
public void closeWebService(String name) {
synchronized (list) {
for (WebServiceInfoImpl info : list) {
if (info.is(name)) {
info.disconnect();
list.remove(info);
return;
}
}
}
}
private class WSCustomizer implements ServiceTrackerCustomizer {
@Override
public JavaWebService addingService(
ServiceReference reference) {
synchronized(list) {
WebServiceInfoImpl info = new WebServiceInfoImpl(JavaWebServiceAdminImpl.this, reference);
if (contains(info)) {
System.out.println("WebService already registered " + info);
return null;
}
list.add(info);
info.connect();
return info.getJavaWebService();
}
}
private boolean contains(WebServiceInfoImpl info) {
for (WebServiceInfoImpl item : list) {
if (item.getName().equals(info.getName())) return true;
}
return false;
}
@Override
public void modifiedService(ServiceReference reference,
JavaWebService service) {
}
@Override
public void removedService(ServiceReference reference,
JavaWebService service) {
synchronized (list) {
synchronized (list) {
for (WebServiceInfoImpl info : list) {
if (info.is(service)) {
info.disconnect();
list.remove(info);
return;
}
}
}
}
}
}
public BundleContext getContext() {
return context;
}
@Override
public void connect(String name) {
synchronized (list) {
for (WebServiceInfoImpl info : list) {
if (info.is(name)) {
info.connect();
return;
}
}
}
}
@Override
public void disconnect(String name) {
synchronized (list) {
for (WebServiceInfoImpl info : list) {
if (info.is(name)) {
info.disconnect();
return;
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy