# EJB, CDI, Webservices



## schmatko (14. Dez 2016)

Hallo zusammen,

bin dabei einen Backend zu entwickeln. 
Das Backend soll folgende Funktionen bieten:
Authentifizierung
Daten von einer Datenbak bereitstellen
Client soll per REST die Daten abholen​
Habe es mit Webservices gelöst ABER was ist EJB und CDI und drei Worten?
Sollte ich das mit EJB oder CDI lösen?
Wann verwende ich was oder muss ich alles zusammen verwenden?

Vielen Dank, bin auf die Antworten gespannt


----------



## stg (14. Dez 2016)

Müssen muss man zunächst einmal so fast gar nix.

Sorry, aber mit den spärlichen Informationen kann man dir keine Ratschläge geben.
Lies deine Frage doch noch mal selbst. Du schreibst in etwa _"Ich soll einen Webservice schreiben und ich habe das mit einem Webservice gelöst" _Was erwartest du darauf nun für eine Antwort?

Zu EJB und CDI:
Bei konkreten Fragen kannst du dir hier immer gerne Rat einholen, aber eine erste Einarbeitung musst du schon selbst leisten. Das würde hier den Rahmen vollends sprengen.


----------



## schmatko (14. Dez 2016)

Ich habe angefangen mit JavaEE mich auseinander zu setzen. Habe Webservices genommen und mit einer Methode biete ich einen Datensatz aus einer MySQL einem Client an.

Webservices mit REST das verwende ich jetzt. Es funktioniert auch. Kann in meinem Browser den Json String anhand der Rest URL anzeigen lassen. Das bedeutet das Webservices die Daten einerL webseite zu verfügung stellen können und auch darstellen->brauche ich nicht, es soll ein Client mit einer Anwendund die Daten abfragen

Ich könnte es so belassen, möchte jedoch wissen was EJB und CDI ist und ob es vlt besser dafür geeignet ist oder wofür die überhaupt geignet sind.

EJB ist doch wie Webservices mit der Ausnahme das EJB kein Servlet und kein JSP anbietet, Servlet ist veraltet und JSP brauche ich nicht also sollte ich EJB nehmen???

CDI-> keine Vorstellung wann und wofür man es anwenden soll oder kann


----------



## stg (14. Dez 2016)

schmatko hat gesagt.:


> Webservices mit REST das verwende ich jetzt.


Die Aussage macht wenig Sinn. 
Der Client ist derjenige, der einen Webservice _verwendet / benutzt. _
REST ist die "_Art_", wie der Webservice aufgebaut ist.
Du hast nun also einen Webservice implementiert. Wie und womit du das gemacht ist, ist aber nach wie vor dein Geheimnis.



schmatko hat gesagt.:


> brauche ich nicht, es soll ein Client mit einer Anwendund die Daten abfragen


Was für eine Art Client den Webservice nutzt ist dem Webservice egal.



> Ich (..) möchte jedoch wissen was EJB und CDI ist


EJBs sind von einem EJB Contianer verwaltete Komponenten, die dazu dienen Geschäftlogik zu kapseln. 
CDI ist ein Standard für *C*ontext und *D*ependency *I*njection.
Wie schon zuvor gesagt: Du musst dich in die elementaren Grundlagen schon selber einlesen. 



> EJB ist doch wie Webservices


 Nein. 



> mit der Ausnahme das EJB kein Servlet und kein JSP anbietet


Servlet und JSP haben mit EJBs zunächst einmal nix zu tun.



> Servlet ist veraltet


Nein.


> sollte ich EJB nehmen


Das kann dir hier niemand beantworten.



> CDI-> keine Vorstellung wann und wofür man es anwenden soll oder kann



z.B. für Dependency Injetion.


----------



## schmatko (14. Dez 2016)

stg hat gesagt.:


> Du hast nun also einen Webservice implementiert. Wie und womit du das gemacht ist, ist aber nach wie vor dein Geheimnis.



Ich habe Glassfish als Server
JavaEE Projekt mit einem Web Modul und javax.json als Library
Datenbank: MySQL




stg hat gesagt.:


> Du musst dich in die elementaren Grundlagen schon selber einlesen.


Bin dabei, verstehe nicht alles und dachte jemand kann mir außerhalb wiki in drei Worten es erklären



stg hat gesagt.:


> Servlet und JSP haben mit EJBs zunächst einmal nix zu tun.


verstehe ich nicht-> denn das sind die zwei sachen die EJB beinhaltet und Webservices nicht


----------



## stg (14. Dez 2016)

schmatko hat gesagt.:


> Ich habe Glassfish als Server
> JavaEE Projekt mit einem Web Modul und javax.json als Library
> Datenbank: MySQL


Nichts davon ist spezifisch für einen Webservice.
Die Frage bleibt bestehen..




> Bin dabei, verstehe nicht alles und dachte jemand kann mir außerhalb wiki in drei Worten es erklären


Nein. In drei Worten ist das nicht mal eben so erklärt. Selbst zu den Grundlagen könnte man seitenweise Prosa verfassen.




> verstehe ich nicht-> denn das sind die zwei sachen die EJB beinhaltet und Webservices nicht


Es wird nicht richtiger, wenn du es wiederholst. Das sind vollkommen verschiedene und voneinander unabhängige Dinge.
Es gibt Webservices, es gibt EJBs, es gibt Servlets und es gibt JSP, wobei JSP auf gewisse Weise auf der Servlet API basiiert.


----------



## schmatko (14. Dez 2016)

du sollst mich nicht belehren und zwingen was asu Büchern zu lernen, es ist ein Forum, ich will antworten von Leuten die eine Meinung dazu haben und die mein Problem verstehen.

Lass es mit deinen Antworten denn die helfen mir nicht weiter. Vlt. hat jemand noch was dazu zusagen.

Dankeschön


----------



## JCODA (14. Dez 2016)

schmatko hat gesagt.:


> du sollst mich nicht belehren und zwingen was asu Büchern zu lernen, es ist ein Forum, ich will antworten von Leuten die eine Meinung dazu haben und die mein Problem verstehen.
> 
> Lass es mit deinen Antworten denn die helfen mir nicht weiter. Vlt. hat jemand noch was dazu zusagen.
> 
> Dankeschön


Es gibt viele Möglichkeiten, wie man Antworten zu seinen Fragen bekommt. Dies ist keine davon.


----------



## stg (14. Dez 2016)

schmatko hat gesagt.:


> du sollst mich nicht (...) zwingen was asu Büchern zu lernen



Ich zwinge niemanden zu irgendetwas. Wenn du die Ratschläge nicht annehmen willst, ist das deine Sache. Für mich dreht sich die Welt auch weiter, wenn dem nicht so ist..



schmatko hat gesagt.:


> ich will antworten von Leuten die eine Meinung dazu haben und die mein Problem verstehen.



Ich denke ehrlich gesagt, dass du der einzige hier bist, der dein Problem nicht versteht. Du willst nur nicht einsehen, was dein eigentliches Problem ist.




schmatko hat gesagt.:


> Lass es mit deinen Antworten denn die helfen mir nicht weiter.



Sie helfen dir nicht weiter, weil einfach überhaupt keine Basis vorhanden ist, auf die man aufbauen könnte. 
Diese _musst _du _selbst _schaffen, da führt überhaupt kein Weg dran vorbei.
Je früher du das einsiehst, desto besser ist es für dich selbst.


----------



## Thallius (14. Dez 2016)

Aber dazu muss man ja Doku lesen......


----------



## SeriousD0nkey (14. Dez 2016)

schmatko hat gesagt.:


> du sollst mich nicht belehren und zwingen was asu Büchern zu lernen, es ist ein Forum, ich will antworten von Leuten die eine Meinung dazu haben und die mein Problem verstehen.
> 
> Lass es mit deinen Antworten denn die helfen mir nicht weiter. Vlt. hat jemand noch was dazu zusagen.
> 
> Dankeschön



Kauf dir ein ordentliches Buch und arbeite das durch. Diese Themen sind viel zu komplex um dir das in ein paar Sätzen zu erklären (die Bücher haben nicht umsonst teilweise über 1000 Seiten).


----------



## schmatko (15. Dez 2016)

Ich bin dabei mir eine Basis zu schaffen.

Wenn ich in Intellij ein JavaEE Projekt erstelle und das Modul Webservices mit auswähle bekomme ich das Ergebnis. Richte meinen Glassfish Server und DB ein und lasse die Anwendung da drauf laufen. 

Die Anwendung bietet per Annotation Zugriffe auf Methoden die mir(Client) das zurückgeben was ich abfrage. Z.B. serverort/api/v1/menus/menu/0 und am ende eine 0 als id oder eine andere die mir dann die nötigen Daten liefert.

Das ist mein Stand!

Was passiert im Hintergrund?
Ich habe weder EJB CDI oder sonst noch was-> nur einen Web Modul-> Das bedeutet das es vollkommen ausreicht-> oder sollte ich Web Modul weglassen wenn ich die Daten auf einer Webseite nicht darstellen will?

Will ich reine Backendanwendung ohne einer Darstellung auf einer Webseite-> sollte ich EJB oder CDI nehmen aber mit einer Darstellung der Daten auf einer Webseite-> Webmodule?


----------



## VfL_Freak (15. Dez 2016)

schmatko hat gesagt.:


> du sollst mich nicht belehren und zwingen was asu Büchern zu lernen, es ist ein Forum, ich will antworten von Leuten die eine Meinung dazu haben und die mein Problem verstehen


na na na .... 
Vielleicht achtet Du mal ein wenig auf Deine Wortwahl !!

Gruß Klaus


----------



## SeriousD0nkey (15. Dez 2016)

Also was du beispielsweise mit CDI machen kannst ist, wie bereits genannt wurde, Dependency Injection. Das ganze macht Sinn, wenn du deine Anwendung in mehrere Unterprojekte (bspw. mit Maven) aufteilst. Damit erreichst du Unabhängigkeiten zwischen den jeweiligen Implementierungen (es ist also nicht zwingend nötig, macht aber schon Sinn dies zu nutzen). Aber dazu sollte man sich einlesen, dass ist zu komplex um dir im Forum diesen Prozess zu erklären.


----------



## stg (15. Dez 2016)

Und zwar nicht direkt in die CDI API, sondern zuvor sollte man verstehen, was Dependency Injection überhaupt ist. Womit wir wieder an dem Punkt wären, dass keine Basis vorhanden ist, auf der man dir vernünftig irgendwas erklären könnte.



> Die Anwendung bietet per Annotation Zugriffe auf Methoden die mir(Client) das zurückgeben was ich abfrage. Z.B. serverort/api/v1/menus/menu/0 und am ende eine 0 als id oder eine andere die mir dann die nötigen Daten liefert.


Ich hab auch mal ein Programm geschrieben ... mit Buchstaben hab ich das geschrieben! Und wenn ich es ausgeführt hab kamen die Daten! (Ungefähr den selben Informationsgehalt hat deine Aussage) Ich glaube dir mittlerweile auch nicht mehr, dass du das nicht extra machst....



> Ich habe weder EJB CDI oder sonst noch was-> nur einen Web Modul-> Das bedeutet das es vollkommen ausreicht-> oder sollte ich Web Modul weglassen wenn ich die Daten auf einer Webseite nicht darstellen will?


Das Java EE 7 Web Profile beinhaltet unter anderem CDI 1.1 und EJB 3.2 lite.
Du hast also "nur" ein Web Modul und willst dieses Weglassen, weil du es nicht brauchst. Dann bleibt ja nichts mehr übrig, richtig?



> Will ich reine Backendanwendung ohne einer Darstellung auf einer Webseite-> sollte ich EJB oder CDI nehmen aber mit einer Darstellung der Daten auf einer Webseite-> Webmodule?


Nochmal: Wer der Client deines Webservices ist, ist dem Webservice egal. 
Und ob du CDI oder EJB verwenden solltest kann dir hier _immer noch niemand_ beantworten. Wir kennen dein Projekt und deine Anforderungen nicht. Letzten Endes kann man dir nur sagen, was CDI und EJB ist (wie schon in Beitrag #4 geschehen!) und dann musst du solche Entscheidungen selbst treffen.


----------



## schmatko (19. Dez 2016)

Danke für eure "hilfreiche" Antworten, mir wurde in einem anderen Forum geholfen, da sind die Mitglieder irgendwie motivierter und hilfsbereiter


----------



## VfL_Freak (19. Dez 2016)

Ja, nee ... ist klar 
vermutlich bist Du da auch nicht so schnell beleidigend geworden, oder ???

Gruß Klaus


----------



## SeriousD0nkey (19. Dez 2016)

schmatko hat gesagt.:


> Danke für eure "hilfreiche" Antworten, mir wurde in einem anderen Forum geholfen, da sind die Mitglieder irgendwie motivierter und hilfsbereiter


Wenn du doch die Hilfsbereitschaft hier jetzt anzweifelst, dann kannst du ja jetzt beweisen, dass du hilfsbereit bist und deine Lösung (die du ja jetzt durch ein anderes Forum in Erfahrung gebracht hast) hier nochmal erläutern, um anderen Besuchern, die zufällig auf dieses Forum stoßen und die gleichen "Probleme" haben zu helfen.


----------



## schmatko (20. Dez 2016)

VfL_Freak hat gesagt.:


> Ja, nee ... ist klar
> vermutlich bist Du da auch nicht so schnell beleidigend geworden, oder ???
> Gruß Klaus


ich denke ich habe keinen beleidigt sondern einfach mal hingewiesen das es kein sinn macht Äußerung von sich zu geben die mich in keinster Weise weitergebracht haben.



SeriousD0nkey hat gesagt.:


> Wenn du doch die Hilfsbereitschaft hier jetzt anzweifelst, dann kannst du ja jetzt beweisen, dass du hilfsbereit bist und deine Lösung......



Ja kann ich machen, werde dann gleich posten was mir geholfen hat


----------



## schmatko (20. Dez 2016)

JavaEE Architektur hat mehrere Komponenten die bereits implementiert sind oder zusätzliche als Framework mit rein können wie z.B Concurrency (ist für die asynchrone Verarbeitung zuständig)

Wie fängt man an, was ist zu beachten?

Die Architektur ist Brutal und vollständig nicht zu erläutern. Hier das wichtigste zum Start was mir auch geholfen hat:

Es gibt zwei Profile, einmal *Web Profil *und *Full Profil*

Web Profil beinhaltet alles das, was man für eine typische Webapplikation benötigt und der Vorteil ist das nicht benötigte Services abgeschaltet sind und es somit schlanker ist. (Full Profil habe nicht angeschaut)

*Web Profil:*

Servlets: Verarbeitung auf der Webebene
JSF: Darstellung im Webbrowser
EJB Lite: Geschäftslogik
JPA: Datenbankzugriffe
JSON –P: Übertragungstechnik

Das sind so paar Komponenten in den Webprofilen (nicht alle) die ermöglichen eine Webapplikation zu erstellen auf die man per REST mit einem Client oder auch im Browser zugreifen kann.

Bsp.: Will man zwei zahlen von einem Client auf einem Server berechnen lassen und das Ergebnis auf DB abspeichern:

Per HTTP greift man auf den Server zu und übergibt per REST zwei zahlen, das erfolgt in so genanntem „Web Container“. Dann kommt EJB ins  Spiel der „EJB Container“  EJB führt die Berechnung durch und greift auf die Datenbank zu um es abzuspeichern. Man kann es als Klassen verstehen eine Klasse Web Darstellung/Abfrage=„Web Container“ andere Klasse die Logik=„EJB Container“. Zusammen ergibt das einen Webserver.

In eurer Entwicklungsumgebung, JavaEE auswählen mit einem Web Profile und/oder ausschaue nach den oben genannten Komponenten halten und mit auswählen, habe so die wichtigsten zum Start aufgezählt mit denen man was entwickeln kann.

Hoffe das der Einstieg somit jemandem klarer wird, ansonsten Fragen, werde soweit es geht auch es versuchen zu beantworten mit meinem Leien Wissen. Sollte ich da was falsch verstanden haben, könnt ihr mich gerne korrigieren, wird mir mehr helfen als die vorherigen Posts


----------



## VfL_Freak (20. Dez 2016)

Moin,


schmatko hat gesagt.:


> ich denke ich habe keinen beleidigt


ok, nein, da hast Du wohl Recht - sorry, da war der Tippfehlerteufel am Werk!
Statt "_beleidigend_" wollte ich eigentlich "_beleidigt_" geschrieben haben, weil das die bewußte Wortwahl nahe legte ...



schmatko hat gesagt.:


> sondern (habe) einfach mal hingewiesen das es kein sinn macht Äußerung von sich zu geben die mich in keinster Weise weitergebracht haben


nun ja, wobei die Wortwahl "_*du sollst mich nicht belehren ...*_" und "_*ich will antworten ...*_" für ein Forum, wo auf freiwilliger Basis geholfen wird, schon sehr heftig sind!!

Gruß Klaus


----------



## schmatko (20. Dez 2016)

VfL_Freak hat gesagt.:


> ....
> nun ja, wobei die Wortwahl "_*du sollst mich nicht belehren ...*_" und "_*ich will antworten ...*_" für ein Forum, wo auf freiwilliger Basis geholfen wird, schon sehr heftig sind!!
> 
> Gruß Klaus


Sorry war mir irgendwie nicht so bewusst, werde in Zukunft drauf achten. Hoffen das wir miteinander respektvoll umgehen werden


----------



## stg (20. Dez 2016)

schmatko hat gesagt.:


> Sollte ich da was falsch verstanden haben, könnt ihr mich gerne korrigieren, wird mir mehr helfen als die vorherigen Posts



Der komplette Inhalt deines Postings ist entweder falsch, sehr ungenau oder irrelevant in Bezug auf deine ursprüngliche Fragestellung.

Ich möchte dir gerne noch einmal ans Herz legen meine bisherigen Antworten hierzu erneut zu lesen. Vielleicht mit ein bisschen Abstand - du sollst dich von den Antworten nicht persönlich angegriffen fühlen. Menschen neigen dazu, dann schnell auf Durchzug zu schalten und nichts, was nicht exakt ihren Vorstellungen entspricht, gelten zu lassen.

Ich kann auch gerne wieder dein gesamtes Posting zerpflücken und auf jeden Punkt einzeln eingehen, aber das hast du bisher auch nicht sonderlich wertgeschätzt.



schmatko hat gesagt.:


> Web Profil beinhaltet alles das, was man für eine typische Webapplikation benötigt


Kann man so ausdrücken, ja. Es ist aber wichtig zu verstehen, was mit der Aussage wirklich gemeint ist. Java EE allgemein kann man als Rahmenarchitektur (beziehungsweise eigentlich nur als die Spezifikation einer solchen) verstehen, die Standard-Lösungen zu Standard-Problem auf einem höheren Abstraktionslevel bereitstellt. Das Web Profile beschränkt sich dabei auf die Standard-Probleme (und -Lösungen) hinsichtlich der Web-Wntwicklung.



> und der Vorteil ist das nicht benötigte Services abgeschaltet sind und es somit schlanker ist. (Full Profil habe nicht angeschaut)


Es wird nichts an- oder abgeschaltet. Dein Anwendungsserver stellt die entsprechenden Funktionalitäten zur Verfügung oder eben nicht. Der Anwendungsserver selbst ist der Teil, der leichgewichtiger wird, wenn er nicht die vollständige Spezifikation implementiert. Ein solcher ist dann in der Regel nicht so Resourcen-hungrig, wie ein vollständiger Java EE Anwendungsserver. Du musst im Grunde nur wissen, welche Teile der Spezifikation dein Anwendungsserver implementiert und kannst diese dann in deiner eigenen Anwendung nutzen. Beschränkst du dich in deiner Anwendung auf das Java EE Web Profile, dann ist diese (theoretisch jedenfalls) beliebig auf einen anderen Anwendungsserver, welcher (nur) das Java EE Web Profile implementiert, portierbar.



schmatko hat gesagt.:


> Per HTTP greift man auf den Server zu und übergibt per REST zwei zahlen, das erfolgt in so genanntem „Web Container“. Dann kommt EJB ins Spiel der „EJB Container“ EJB führt die Berechnung durch und greift auf die Datenbank zu um es abzuspeichern. Man kann es als Klassen verstehen eine Klasse Web Darstellung/Abfrage=„Web Container“ andere Klasse die Logik=„EJB Container“. Zusammen ergibt das einen Webserver.



Die Daten werden nicht per REST übergeben. Die Aussage ergibt überhaupt keinen Sinn! Die Daten werden (in der Regel) per HTTP(s) an den Server übergeben. REST ist eine _Eigenschaft des Webservices_, der diese Daten verarbeitet. Das hatte ich aber auch in einem der vorherigen Postings bereits geschrieben... REST bedeutet in erster Linie einfach nur, dass der Service zustandslos ist. Das heißt insbesondere, dass jede Abfrage in sich geschlossen ist.
Der EJB Container führt deine Berechnungen nicht durch, das geschieht in "ganz normalem Java-Code". Der EJB Container ist auch nicht mit dieser Klasse für die Geschäftslogik gleichzusetzen, sondern der EJB Container ist ein Bestandteil des Anwendungsservers, der (u.A.) deine konkreten EJBs verwaltet. Du erstellst deine EJB nicht selbst, sondern fragst das Framework nach einer Instanz. Dadurch, dass das Framwork diese Instanz kennt,  hat es die Möglichkeit in verschiedenster Art und Weise Einfluss auf das Geschehen zu nehmen.



schmatko hat gesagt.:


> auf die man per REST mit einem Client oder auch im Browser zugreifen kann.


Zu "REST" siehe oben. Desweiteren: Du scheinst den Begriff "Client" nicht richtig zu verstehen. Ein Webbrowser ist auch ein Client. Eine EJB kann auch ein Client einer anderen EJB oder eines WebServices sein. Ein WebService kann auch Client von was anderem sein. Ganz allgemein: ein A fragt ein B nach etwas. Optional antwortet B darauf an A. Dann ist A ein Client von B.


----------

