Bael 728 introduction to osgi (#3017)
* BAEL-728: first working geocoder example * First steps with different geocoder * Working plaing app * Small step * Maven project subdivided into components. * <Export-Package> added * CLient * small step fwd * Committing before resetting idea * It does not compile! * some other mod * Works * step * Examples works * removed unused code * Removed empty folder
This commit is contained in:
parent
062b83fe17
commit
94f4dd1d77
|
@ -0,0 +1,55 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<!-- com.baeldung/osgi-intro-sample-activator/1.0-SNAPSHOT -->
|
||||||
|
<parent>
|
||||||
|
<artifactId>osgi-intro</artifactId>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<!-- Please, note this is not the usual 'jar'. -->
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
|
<artifactId>osgi-intro-sample-activator</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.osgi</groupId>
|
||||||
|
<artifactId>org.osgi.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Bundle-Version>${project.version}</Bundle-Version>
|
||||||
|
|
||||||
|
<!-- Qualified name of the class that exposes the activator iface. -->
|
||||||
|
<Bundle-Activator>com.baeldung.osgi.sample.activator.HelloWorld</Bundle-Activator>
|
||||||
|
|
||||||
|
<!-- One important thing to note:
|
||||||
|
since you are not exporting the package "com.baeldung.osgi.sample.activator",
|
||||||
|
you should at least add it to the Private-Package instruction.
|
||||||
|
Otherwise, the classes inside the package will not be copied to your bundle,
|
||||||
|
as the default value of this instruction is empty. -->
|
||||||
|
|
||||||
|
<Private-Package>com.baeldung.osgi.sample.activator</Private-Package>
|
||||||
|
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.osgi.sample.activator;
|
||||||
|
|
||||||
|
import org.osgi.framework.BundleActivator;
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
|
public class HelloWorld implements BundleActivator {
|
||||||
|
|
||||||
|
public void start(BundleContext ctx) {
|
||||||
|
System.out.println("Hello World.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop(BundleContext bundleContext) {
|
||||||
|
System.out.println("Goodbye World.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>osgi-intro</artifactId>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<!-- mvn:com.baeldung/osgi-intro-sample-client/1.0-SNAPSHOT -->
|
||||||
|
<artifactId>osgi-intro-sample-client</artifactId>
|
||||||
|
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>osgi-intro-sample-service</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.osgi</groupId>
|
||||||
|
<artifactId>org.osgi.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Bundle-Version>${project.version}</Bundle-Version>
|
||||||
|
<Bundle-Activator>com.baeldung.osgi.sample.client.Client</Bundle-Activator>
|
||||||
|
|
||||||
|
<Private-Package>com.baeldung.osgi.sample.client</Private-Package>
|
||||||
|
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,44 @@
|
||||||
|
package com.baeldung.osgi.sample.client;
|
||||||
|
|
||||||
|
import com.baeldung.osgi.sample.service.definition.Greeter;
|
||||||
|
import org.osgi.framework.*;
|
||||||
|
|
||||||
|
public class Client implements BundleActivator, ServiceListener {
|
||||||
|
|
||||||
|
private BundleContext ctx;
|
||||||
|
private ServiceReference serviceReference;
|
||||||
|
|
||||||
|
public void start(BundleContext ctx) {
|
||||||
|
this.ctx = ctx;
|
||||||
|
try {
|
||||||
|
ctx.addServiceListener(this, "(objectclass=" + Greeter.class.getName() + ")");
|
||||||
|
} catch (InvalidSyntaxException ise) {
|
||||||
|
ise.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop(BundleContext bundleContext) {
|
||||||
|
if (serviceReference != null) {
|
||||||
|
ctx.ungetService(serviceReference);
|
||||||
|
}
|
||||||
|
this.ctx = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serviceChanged(ServiceEvent serviceEvent) {
|
||||||
|
int type = serviceEvent.getType();
|
||||||
|
switch (type) {
|
||||||
|
case (ServiceEvent.REGISTERED):
|
||||||
|
System.out.println("Notification of service registered.");
|
||||||
|
serviceReference = serviceEvent.getServiceReference();
|
||||||
|
Greeter service = (Greeter) (ctx.getService(serviceReference));
|
||||||
|
System.out.println(service.sayHiTo("John"));
|
||||||
|
break;
|
||||||
|
case (ServiceEvent.UNREGISTERING):
|
||||||
|
System.out.println("Notification of service unregistered.");
|
||||||
|
ctx.ungetService(serviceEvent.getServiceReference());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<!-- mvn:com.baeldung/osgi-intro-sample-service/1.0-SNAPSHOT -->
|
||||||
|
<parent>
|
||||||
|
<artifactId>osgi-intro</artifactId>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>osgi-intro-sample-service</artifactId>
|
||||||
|
|
||||||
|
<!-- Please, note this is not the usual 'jar'. -->
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.osgi</groupId>
|
||||||
|
<artifactId>org.osgi.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Bundle-Version>${project.version}</Bundle-Version>
|
||||||
|
<Bundle-Activator>com.baeldung.osgi.sample.service.implementation.GreeterImpl</Bundle-Activator>
|
||||||
|
<Private-Package>com.baeldung.osgi.sample.service.implementation</Private-Package>
|
||||||
|
<Export-Package>com.baeldung.osgi.sample.service.definition</Export-Package>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.baeldung.osgi.sample.service.definition;
|
||||||
|
|
||||||
|
public interface Greeter {
|
||||||
|
|
||||||
|
public String sayHiTo(String name);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.baeldung.osgi.sample.service.implementation;
|
||||||
|
|
||||||
|
import com.baeldung.osgi.sample.service.definition.Greeter;
|
||||||
|
import org.osgi.framework.BundleActivator;
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
import org.osgi.framework.ServiceReference;
|
||||||
|
import org.osgi.framework.ServiceRegistration;
|
||||||
|
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
|
public class GreeterImpl implements Greeter, BundleActivator {
|
||||||
|
|
||||||
|
private ServiceReference<Greeter> reference;
|
||||||
|
private ServiceRegistration<Greeter> registration;
|
||||||
|
|
||||||
|
@Override public String sayHiTo(String name) {
|
||||||
|
return "Hello " + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void start(BundleContext context) throws Exception {
|
||||||
|
System.out.println("Registering service.");
|
||||||
|
registration = context.registerService(Greeter.class, new GreeterImpl(), new Hashtable<String, String>());
|
||||||
|
reference = registration.getReference();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void stop(BundleContext context) throws Exception {
|
||||||
|
System.out.println("Unregistering service.");
|
||||||
|
registration.unregister();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>osgi-intro</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<modules>
|
||||||
|
<module>osgi-intro-sample-activator</module>
|
||||||
|
<module>osgi-intro-sample-service</module>
|
||||||
|
<module>osgi-intro-sample-client</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>parent-modules</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>..</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>osgi-intro-client</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>osgi-intro-service</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>osgi-intro-gxyz</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>osgi-intro-mapquest</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.squareup.okhttp3</groupId>
|
||||||
|
<artifactId>okhttp</artifactId>
|
||||||
|
<version>3.9.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.json</groupId>
|
||||||
|
<artifactId>javax.json-api</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish</groupId>
|
||||||
|
<artifactId>javax.json</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.osgi</groupId>
|
||||||
|
<artifactId>org.osgi.core</artifactId>
|
||||||
|
<version>5.0.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<version>1.4.0</version>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
Loading…
Reference in New Issue