Ich versuche, eine Jersey Resource zu erstellen, die es mir ermöglicht, einen ElasticSearch TransportClient wiederzuverwenden. Daher möchte ich eine einzige Instanz von TransportClient für alle Ressourcen verwenden, für die dies erforderlich ist. Bisher habe ich diese bekam:Jersey injizieren Instanz in Ressource
Ressource:
@Path("/request")
public class ConfigurationResource {
private final TransportClient transportClient;
@Inject
public ConfigurationResource(TransportClient transportClient)
{
this.transportClient = transportClient;
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String AlarmStatus(){
if(transportClient != null)
return "Not NULL! ID: ";
else
return "NULL :(";
}
}
Bindung:
public class WebMainBinder extends AbstractBinder {
@Override
protected void configure() {
TransportClient transportClient = null;
try {
transportClient = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
return;
}
bind(transportClient).to(TransportClient.class);
}
}
Hauptanwendung:
@ApplicationPath("service")
public class WebMain extends ResourceConfig {
public WebMain(){
register(new WebMainBinder());
packages(true, "com.eniacdevelopment.EniacHome.Resources");
}
}
Web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>com.eniacdevelopment.EniacHome.Application.WebMain</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>com.eniacdevelopment.EniacHome.Application.WebMain</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
</web-app>
Ich habe eine Fabrik auch versucht, mit etwa so:
public class TransportClientFactory implements Factory<TransportClient> {
private TransportClient transportClient;
@Override
public TransportClient provide() {
if(this.transportClient == null){
try {
transportClient = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
return null;
}
}
return transportClient;
}
@Override
public void dispose(TransportClient transportClient) {
}
}
Und es dann verbindlich auf diese Weise:
bindFactory(TransportClientFactory.class)
.to(TransportClient.class).in(Singleton.class);
Aber kein Erfolg. Ich bekomme weiterhin Unbefriedigende Abhängigkeiten für den Typ TransportClient mit Qualifiern @Default.
Hilfe wäre sehr willkommen!