EJB Frage

sirius76

Mitglied
liebe Community

Anbei ein problem welches ich nicht verstehe warum es nicht funktioniert.

Hier meine SessionBean mit Namen CalculatorRemoteImpl
Java:
package unter;

import javax.ejb.Stateless;

@Stateless(name="CalculatorRemote", mappedName="demo.business.CalculatorRemoteJNDI") 
public class CalculatorRemoteImpl implements CalculatorRemote{
	
	public int add(int wertx, int werty) {
		return wertx + werty;
	}
}

Die Schnittstelle mit Namen CalculatorRemote
Java:
package unter;

import javax.ejb.Remote;

@Remote
public interface CalculatorRemote {
	public int add(int wert1, int wert2);
}

und hier mein Client welcher funktioniert:
Java:
package ett;

import javax.naming.InitialContext;

import unter.CalculatorRemote;

public class Client {

	public static void main(String[] args) throws Exception{
	      InitialContext context = new InitialContext();
	      CalculatorRemote calculator = (CalculatorRemote) context.lookup("demo.business.CalculatorRemoteJNDI");
	      System.out.println("Resultat: " + calculator.add(9, 5));
	}

}
Ausgabe ist Resultat : 14


Aber wenn ich das selbe beim Client mit Dependency Incjection versuche also mit
Java:
package ett;
import javax.ejb.EJB;
import unter.CalculatorRemote;

public class Client2 {
	
	@EJB 
	public CalculatorRemote calculator;
	
	public void business(){
		System.out.println("Resultat: " + calculator.add(9, 5));
		
	}

	public static void main(String[] args) throws Exception{
		 Client2 obj = new Client2();
		 obj.business();

	}
}

erhalte ich die Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
at ett.Client2.business(Client2.java:11)
at ett.Client2.main(Client2.java:17)


Ich bin schon ewig lange dran und finde den Fehler nicht. Habt ihr eine Idee ? Ich würde mich sehr freuen für eure Hilfe.

Schoenen tag.
 
Das liegt daran dass dein Client kein Server hat.

Entweder du installierst auf deinem Client einen Server, oder du verzichtest auf DI.
 
sorry das versteh icj hetzt überhaupt nicht was du meinst. wieso benötigt ein client einen Server ?
auf meinem PC habe ich glassfish installiert und auf meinem pc ist dieser code abgelegt und auf dem applikationserver deployt.
hat jemand eine andere idee warum diese fehlermeldung kommt. vorallem ist es ein beispiel aus einem buch für ejb einsteiger, also ein beispiel dass eigentlich funktionieren soll.

danke euch
 
Wenn er das als EAR verpackt (oder in einem WAR WebProfile) dann muss das aber keine Remote Bean sein, es sei denn, es gibt noch andere Clients. 🙂
 
Wie, der wird Remote gestartet? Ich dachte, der soll jetzt mit ins EAR auf den Glassfish? Oder habe ich Dich falsch verstanden?
 
Das unverständniss ist nicht ganz ungerechtfertigt.

Es sollte doch kein Problem sein für sirus einen classloader abzuleiten der die felder besetzt.... Macht das mal jeamand?
 
@EJB lässt sich laut Spec nur in anderen EJBs oder in Servlets nutzen, nicht in POJOs.
Wenn du CDI verwenden möchtest, also DI auch für POJOs, musst du @Inject verwenden und das klappt auch außerhalb eines EE Containers.
 

Neue Themen


Zurück
Oben