Hallo zusammen,
ich möchte mein Programm umbauen und es zu Microservices mit Spring boot aufbauen. Nun habe ich eine Verständnisfrage: Wenn ich eine View aufbaue, kommuniziert diese dann auch über REST mit den Services?
Möchte nämlich JSF Primefaces nutzen als View, da ich mir da ein Template gekauft habe. Wenn es etwas einfacheres als JSF im Zusammenhang auch gut, dann freue ich mich über Tipps
Vaadin zb? JSF hab ich jetzt relativ gut drauf. müsste da wieder von 0 anfangen. das will ich eigentlich vermeiden, es sei denn es ist super einfach weiß da grad nicht, wo ich ansetzen soll. Mein erster Service wäre jetzt die View, in welcher Produkte angelegt werden können, die an einen service gehen, der es ihn die DB speichert
Hab null Ahnung von Javascript, will ich auch ehrlich nicht.
Vaadin erinnert mich an Swing, also alles rein in Java -> find ich gut. Aber da muss man so viel CSS machen damit es hübsch ist. In einem anderen Forum habe ich gelesen, dass es ein fix und fertig Theme gibt. Hab es nur noch nicht gefunden, aber das wäre ja gut, wenn es da schon was fertiges geben würde, wo man nur noch die Menüs usw anpassen muss Muss funktionieren, schön sein ist unwichtig
jsf und spring boot muss erst irgendwas umkonfiguriert werden, beim 2. versuch ging es immer noch nicht, das ist mir dann zu nervraubend noch weiter rumzubasteln
Hast du ne Idee, warum mein Service nicht startet?! Im Eclipse gehts, außerhalb eclipse nicht.
Code:
ERROR org.springframework.boot.SpringApplication - Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)
Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
Ja ist ein Beispiel. wie gesagt in Eclipse läuft es. Ich vermute, dass da was nicht gepackt wird oder so?! Vielleicht exportiere ich das auch falsch. Ich klicke auf Export > Runnable Jar und auf dem Server java -jar Blabla.jar
Oh guter Tipp, danke! Lokal Ging es schon mal außerhalb Eclipse, nun lad ich es mal auf den Server... da gleich noch ne Frage, jeder Microservice ist 30 MB groß. Die ganzen Libarys kann man doch sicher irgendwo einmal bereitstellen und nicht für jeden Service doppelt und dreifach oder?
ah ok, ja das stimmt natürlich. Also nur die nötigen Libs rein um Speicher zu sparen.
Mit dem Mavenbuilt hat geklappt! Vielen vielen Dank. Wäre ich in 10 Jahren noch nicht drauf gekommen.
Hast du noch einen Tipp, wie man die Services deployed? Ich würde die jetzt einfach (wie soeben) alle auf den Server in einen Ordner packen (fachlich sortiert) und vielleicht noch mit init.d startbar machen.
Jetzt habe ich den service mit java -jar service.jar gestartet. Nach dem Schließen des SSH Fensters, ist der Service down. Wir macht mans richtig?
Ok, der Kostet aber hab grad mal 3 services auf dem Testserver gestartet, das ganze sah dann so aus und die Kiste ist herunter gefahren... 2GB RAM. Die Services machen NICHTS außer da sein
Kann oder muss man den RAM Speicher pro Service begrenzen?
dacht ich mir jetzt muss ich nur noch herausbekommen, wie ich einen service als neue Instanz clone. die bekommt ja sicher einen neuen port oder? hast du Coach da einen tipp wonach ich suchen muss?
Warum klonen?
Einfach eine neue Instanz mit zufälligem Port starten (afaik passiert das, wenn man Port 0 nutzt). Die meldet sich beim Eureka-Server (nutzt du doch, oder vertu ich mich da grad?) und wird darüber gefunden/findet darüber alles
Jap, genau dafür ist Eureka da.
Das Gateway (Zuul?) nutzt ja auch Eureka, würde ich aber nicht für Service-Service, sondern Frontend-Service-Kommunikation nutzen. Bei Services untereinander ist ja egal, ob "eine Api" (das Gateway) oder mehrere (jeder Service einzeln), das Gateway kann's da aber manchmal komplizierter machen
Krass! Das ist ja echt einfach. Zuul heißt es genau. Danke für deine tolle Hilfe, ich weiß das echt sehr zu schätzen! Tjaaa dann fehlt mir jetzt nur noch was zu View, dann kann ich loslegen, versuche mich grad mit Vaadin, ist das eine gute Idee? Da gibts aber auch wieder Vaadin mit Spring, Vaadin mit Spring Boot ohne Spring boot, herbe da soll einer durch sehen. React soll wohl super sein aber ich hab echt keine Lust auf Java Script, da grault es mir vor das irgendwie mal lernen zu müssen.
Im Prinzip kannst du das auch mit JSF machen (kann ja durchaus auf einem EE-Server laufen), musst dann entweder ein festes Gateway haben oder das ganze rudimentär an Eureka anbinden (sollte über die REST-APIckein großes Problem sein).
React und allgemein modernes Javascript ist gar nicht mehr sooo schlimm, kann ja durchaus auch Typescript nutzen und ist dann zb typisiert unterwegs,
mal andersherum gedacht.... könnte ich nicht auch ein Programm in FX schreiben mit der Einfachheit von Spring boot? Sprich jeder user hat eine eigene FX Anwendung am laufen die sich über rest mit den services verbindet? Darin kann er dann daten eingeben und sonst was starten. Der eigentliche Job (das stetige updaten von Produktdaten in die DB) erfolgt dann eh automatisiert auf dem server, dazu braucht es kein zutun vom user. Dann ist natürlich wieder der Nachteil; UI Updates müssen verteilt werden
mrbrown ich brauch deine Hilfe JSF hab ich nun mit Spring boot zum laufen bekommen auf Payara Micro. Nun will ich den login realisieren, finde aber kein vollständiges tutorial für tenant Datenbank Handling. Oder ich bin zu doof das wozu verstehen. Hast du was sinnvolles zur Hand?
Nun will ich den login realisieren, finde aber kein vollständiges tutorial für tenant Datenbank Handling. Oder ich bin zu doof das wozu verstehen. Hast du was sinnvolles zur Hand?
Jeder User muss eine eigene Datenbank bekommen. Die Daten dürfen nicht gemeinsam in einer DB gespeichert sein. Während sich der User einlogged, muss dann entsprechend mit der richtigen Datenbank gearbeitet werden.
Nun habe ich einen DB Service, der per REST Produktdaten anlegt, herausgibt usw. Wenn ein anderer Service diese DBService API anspricht, muss der DB Service auch entsprechend Daten aus der korrekten Datenbank holen/schreiben. Je nach dem was in der URI als Tenant angegeben wurde.
Das spiel ich mal durch danke. Angenommen ich habe 100 Datenbanken, wie zum Geier Update ich die Alle, wenn es neue Tabellen oder so gibt?! Gibts da eine Automatik? Oder schreibt man sich da selber einen "Updater" der die Änderungsscripte ausführt?
Warum wird in dem Beispiel Jersey genutzt? Spring boot hat doch eigenes Framework für REST oder? Hat das was zu sagen oder hab ich was falsch verstanden?
Warum wird in dem Beispiel Jersey genutzt? Spring boot hat doch eigenes Framework für REST oder? Hat das was zu sagen oder hab ich was falsch verstanden?
Spring Boot ist im Grunde genommen eine "opinionated" Zusammenstellung von third-party Libraries zu einem funktionierenden Ganzen: Jersey als JAX-RS Implementierung, Tomcat (oder Jetty) als Servlet Container, Hibernate als JPA Implementierung, Jackson fürs JSON Marshalling, etc... und natürlich Spring Framework als DI-Container und Spring Web MVC mit seinen eigenen Annotationen und Konfigurationen, das sich den darunterliegenden Libraries (Tomcat, Jersey und Jackson) bedient und diese konfiguriert.
Ok, vielen Dank! Wenn ich das Projekt aus dem Link mit Eclipse starte, kommt schon mal ne Antwort von der Api (zwar nicht was ich sehen will, aber immer hin)
Wenn ich das Ganze per Terminal starten will kommt
kein Hauptmanifestattribut, in database-service.jar
und es startet nichts, hast du ne Idee woran das liegen kann?
Wenn ich das Ganze per Terminal starten will kommt
kein Hauptmanifestattribut, in database-service.jar
und es startet nichts, hast du ne Idee woran das liegen kann?
beim bauen kommt noch folgende Meldung
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 17, column 12
Angenommen ich habe 100 Datenbanken, wie zum Geier Update ich die Alle, wenn es neue Tabellen oder so gibt?! Gibts da eine Automatik? Oder schreibt man sich da selber einen "Updater" der die Änderungsscripte ausführt?
Warum wird in dem Beispiel Jersey genutzt? Spring boot hat doch eigenes Framework für REST oder? Hat das was zu sagen oder hab ich was falsch verstanden?
Vielen dank, scheint du hast voll Plan gibt es noch ne alternative zu der db thematik? Könnte ich nicht eine tabelle erstellen in der die zugangsdaten zu den kundendatenbanken sind, wenn dann die view was aus der db braucht, gibt sie bei der rest anfrage den nutzer mit an. Dann schaut der datenbankservice nach, aus welcher datenbank etwas geholt werden soll. Nur mal so als alternative. Oder könnte man für jeden kunden einen eigenen server/service aufstarten der auf einer eigenen domain läuft, sodass der kunde das gefühl hat er logged sich nicht auf einem portal ein sondern hat ein eigenes programm? Mit diesem tenant ist mir irgendwie nicht geheuer