Hi,
ich habe folgendes Scenario:
- Projekt base
beinhaltet Schnittstellen und APi für die Webanwendung, so unter anderem
public interface Greeter {
public String sayHi();
}
- Projekt integration:
beinhaltet eine Service klasse ala
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@Path("test")
@ApplicationScoped
public class TestService implements SomeService {
@Inject
private Greeter greeter;
@GET
@Produces("text/plain")
@Path("greet")
public void greet() {
return greeter.sayHi();
}```
- Projekt server:
ein einfacher server und die Greeterimplementierung
public class Server {
public static final String BASE_URI = “http://localhost:9889/ts”;
public static void main(String[] args) throws IOException, URISyntaxException {
HttpServer server = startServer();
try {
System.out.println("Started " + BASE_URI);
System.out.println("Hit any key to terminate");
System.in.read();
}
finally {
server.shutdownNow();
}
}
public static HttpServer startServer() {
Set<Class<?>> classes = loadServices(SomeService.class);
ResourceConfig rc = new ResourceConfig().registerClasses(classes);
return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
}
private static <T> Set<Class<?>> loadServices(Class<T> clazz) {
ServiceLoader<T> loader = ServiceLoader.load(clazz);
return StreamSupport.stream(loader.spliterator(), false).map(Object::getClass).collect(Collectors.toSet());
}
}
public class MyGreeter implements Greeter {
public String sayHi() {
return “I say hi”;
}
}
Wie kann ich diese nun zusammenbringen, so dass **Greeter** im Service injected wird mit der Implementierung im server projekt ?
Das Serverprojekt hat alle anderen Projekte zur Runtime im classpath.
Macht das Sinn ?