2016-04-19 12 views
0

Ich habe diesen Endpunkt auf meiner JAX-RS Java EE-Anwendung:CDI als Fabrik?

public class SearchEndpoint implements ISearchEndpoint 
{ 

    @Inject protected SearchService searchService; 

    @Override 
    public Response search() 
    { 
     return Response.ok().entity(this.searchService.search()).build(); 
    } 

} 

In searchService's search Methode:

public class SearchService { 

    @Inject private QueryVisitor visitor; 

    public List<?> search() { 
     for (Expression<?> group : groups) 
      group.accept(this.visitor); 
    } 
} 

Und dann in QueryVisitor,

@Override 
public ESEntityPathPointer<?> visit(Expression<?> expr, ESEntityPathPointer<?> context) { 
    switch ((EntityType)expr.getMetadata().getElement()) 
    { 
     case digitalInput: 
      if (context == null) 
       context = new DigitalInputESEntityPathPointer(); 
      break; 
     case followUpActivity: 
      if (context == null) 
       context = new FollowUpActivityESEntityPathPointer(); 
      break; 
     case ...; 
    } 
    return context; 
} 

So spritzt CDI ein SearchService auf meiner JAX-RS-Endpunkt-Implementierung, dann injiziert CDI eine QueryVisitor in zuvor injizierten SearchService.

Also, wie Sie in der Lage sind zu erraten, ist QueryVisitor.visit als eine Fabrik. Gemäß einem Enumerationswert wird ein ESEntityPathPointer<?> Objekt oder ein anderes Objekt erstellt.

Ich möchte diese Objekte mit CDI erstellt werden. Ich habe ein bisschen darüber gelesen, aber ich bin nicht ganz in der Lage herauszufinden, wie das geht.

Irgendwelche Ideen?

Antwort

1

Versuchen Sie Folgendes:

SomeBean bean = CDI.current().select(SomeBean.class).get(); 

Qualifikations Verwendung? Versuchen Sie Folgendes:

+0

Es teilt mir mit: WELD-001308: Kann keine Beans für Typ auflösen: class DigitalInputESentityPathPointer; Qualifier: [] – Jordi

+0

@Jordi Sie könnten einige Einblicke aus dieser [Frage] (http://stackoverflow.com/q/31812173/1426227) bekommen. Übrigens, haben Sie Qualifier in Ihrer 'DigitalInputENentityPathPointer' Klasse? –

+0

Ja. Ich habe sie entfernt und jetzt funktioniert es. Könnten Sie mir eine kurze Einweisung bringen? – Jordi