2016-08-09 65 views
1

ich in einem JavaEE Projekt arbeite und ich verwende ein Interface-Methode zu implementieren, aber wenn ich eine EJB verwenden möchten sie sagen, dass meine EJB
Interface.java null istKann nicht EJB in der Klasse verwenden, die Schnittstelle verwenden

public interface Interface { public void methodTest(); } 

SubInterface.java

public class SubInterface implements Interface { 
@EJB 
private myEJB myejb 
@Override 
public void methodTest(){ 
if(myejb == null){ 
System.out.println("He is null"); 
} 
} 
} 

myEJB.java

@Stateless 
public class myEJB extends SomeAbstractFacade { 
@PersistanceContext 
private EntityManager em ; 

.... 

} 

UserController.java

@ManagedBean 
@ViewScoped 
public class UserController extends SomeAbstractController implements   Seializable{ 
private interface myInterface ; 

public void method(){ 
myInterface = new SubInterface(); 
myInterface.methodTest(); 

} 

} 

wenn ich ausführen methodTest wir er null in der Ausgabe ist zu lesen.
danke

+0

Wie instanziieren Sie die Klasse, die das Myejb-Feld enthält? Es muss durch das Abhängigkeits-Injection-Framework Ihres EE-Providers instanziiert werden, andernfalls werden EJBs nicht injiziert. Versuchen Sie auch, ClassNames mit Großbuchstaben (CamelCase) zu starten. Der Rest der Java-Community wird es zu schätzen wissen. –

+0

Ich werde meine Frage aktualisieren, um myEJB-Klasse hinzuzufügen –

+0

Können Sie zeigen, wie Sie die SubIntefac-Klasse instanziieren? –

Antwort

-1

Dependency Injection ist nur wie Session Beans oder Interceptors auf verwaltete Klassen unterstützt und nicht auf regelmäßige POJO. Daher können Sie keine Injektion für Hilfsklassen verwenden. wir können ein einfaches Beispiel machen Java Class ist in einem Level klassifiziert und EJB ist in einer höheren Ebene klassifiziert, die bedeuten, dass sie nicht leicht kommunizieren können, ist die Lösung, Suche zu verwenden, die Suche nach der EJB mit seinem eigenen Weg zu gehen.

+0

_ "Wir können ein einfaches Beispiel machen Java-Klasse ist in einer Ebene klassifiziert und EJB ist in einer höheren Ebene klassifiziert, was bedeutet, dass sie nicht leicht kommunizieren können, ist die Lösung zu suchen, die Suche nach dem EJB mit seinem gehen eigener Weg. "_ Das ist mir völlig unklar und ich kann nicht sehen, warum Sie diese Antwort (mit einem Downvote) akzeptiert haben und nicht die 3-mal upgesprochene Antwort. – Kukeltje

+0

weil die Lösung, die Sie für diese Lösung vorschlagen, weit von dem entfernt ist, was Sie von einer Lösung halten, jedes Problem ein neues Problem für die Person ist, wie Sie danach fragen, und wenn drei Leute dafür werben, bedeutet das nicht, dass es die richtige Antwort ist Frage, und Sie wissen, dass, selbst wenn ich es als eine richtige Antwort gemacht habe ich keine Belohnungen (Reputation) darüber, dass etwas denke ich denke, –

+0

Bemerkenswert ist, dass mehr als eine Person denkt, dass die Frage und upvoted Antwort sind ein Spiel (ja, mich eingeschlossen). Wenn es nicht lange her ist, wie Sie vorschlagen, dann kann nur eines falsch sein. Die Frage, die Sie gestellt haben, ist nicht das, was Ihr tatsächliches Problem/Ihre Frage war und Sie haben das eigentliche Problem auf eine völlig andere Art und Weise gelöst. Das wäre an sich schon bemerkenswert, da die meisten Ihrer Antworten die gleiche Sache sind wie die aufgewertete Antwort (nur umgekehrt). Da du Code nicht gepostet hast, wie du ihn gelöst hast, ist diese Q/A-Kombination (dein A) für andere imo völlig nutzlos. – Kukeltje

3

Sie müssen Ihre Schnittstelleninstanz injizieren. Wenn Sie "neu" verwenden, werden alle Anmerkungen (@EJB usw.) ignoriert, da der Abhängigkeitsmanager die Erstellung dieser Instanz nicht kennt.

Also in Ihrer verwalteten Bean kommentieren Sie die private Schnittstelle Feld und der ejb wird für Sie injiziert werden.

@ManagedBean 
@ViewScoped 
public class UserController extends SomeAbstractController implements   Seializable{ 

    @Inject 
    private interface myInterface ; 

    public void method(){ 
     myInterface.methodTest(); 

    } 

} 
+0

funktioniert nicht, ich verstehe nicht, warum das Problem im Subinterface ist, es ist sehr seltsam, wenn Sie EJB in einer Java-Klasse verwenden können –

+2

Das Problem ist, dass Sie "neu" verwenden. Wenn Sie das Schlüsselwort 'new' verwenden, werden keine EJBs erstellt. –

+0

Wenn Sie es zum ersten Mal aufrufen müssen, verwenden Sie neu, warum ich neue SubInterface verwenden –