![]() |
|
| #1 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Hallo zusammen,
ich hab bis jetzt noch nicht viel gemacht was mit Server und OSGi zu tun hatte, darum stellen sich mir einige Fragen. Ich habe gerade eine Standalone RCP Anwendung in den folgende Bundles vorliegen: GUI,Model,Service,DAO,Logging,DB (Derby). Nun will ich auf dem Client nur noch die GUI und evtl. die Models benutzen. Und auf einem Server die Model,Service,DAO usw. Bundles. Für das Remoting habe ich mir mal die Doku und den Artikel angeschaut. Enterprise Eclipse RCP - Teil 2: Remoting und Caching So wie meine Strukur aufgebaut ist muss ich die Services noch exportieren und mein client muss diese importieren. 1. Benötige ich für die remoting-servlet.xml und web.xml ein eigenes Bundle??? 2. Danach benötige ich ja noch einen Server, was benutz ich am besten hab mal den Tipp für Spring DM Server bekommen? Aber reicht der mit oder brauch ich noch nen Tomcat o.ä? |
|
|
|
| #2 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 14.04.2006
Fachbeiträge: 1.570
Abgegebene Danke: 7
Erhielt 65 Danke für 65 Beiträge
|
Wenn ich mich nicht täsche, dann basiert Spring Remoting doch auf RMI, und dann brauchst du nix.
Ansonsten würd ich einfach den Tomcat nehmen der bei Spring DM dabei ist, nicht Spring DM Server. Und dann machst du ein extra bundle. Manifest: Code:
Web-ContextPath: web Bundle-Version: 1.0.0.qualifier Bundle-ClassPath: WEB-INF/classes/, WEB-INF/lib/, . Jedes web-bundle ist ne eigene webapp. Beispiel siehe anhang. Bundles die du noch brauchst: catalina.start.osgi-1.0.0.jar <- das fährt tomcat hoch catalina.osgi-5.5.23-SNAPSHOT.jar <- das ist der tomcat Und natürlich der Spring Web-Extender (scannt die Manifest der Bundles): spring-osgi-web-1.2.1.jar spring-osgi-web-extender-1.2.1.jar |
|
|
|
| Danke sagt: |
SirWayne (13.10.2010)
|
| #4 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Okay das mit dem web Bundle habe ich auch so gemacht =) außer dass ich kein Servlet benötige sondern da drin meine Remoting Sachen habe.
Aber für was genau brauch ich das Bundle tomcat config? Und was genau muss ich jetzt auf dem Server deployen? Alle Bundles? Das mit den 2 Tomcat Bundles habe ich auch nicht so richtig verstanden? Wo muss ich die einfügen weil ich starte den Tomcat doch ganz normal über die startup.bat? Und wie macht man am besten die launch Dateien, manuell? EDIT: Okay wie hier gelesen hab soll ein Jetty besser sein ...Spring DM: Problem mit Tomcat als OSGI-Service Aber das Prinzip hab ich immer noch nicht gerafft. Ich integrier den Server einfach als OSGi Bundle (also nehm ihn in meine target platform mit auf)? Und der fährt sich dann automatisch hoch oder wie? Geändert von SirWayne (15.10.2010 um 09:39 Uhr) |
|
|
|
| #5 (permalink) | |||
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Okay ich glaub ich will zuviel aufeinmal ^^... Fang ich mal klein an.
Also ich hab den Jetty in meine target platform mit aufgenommen (OSGi Update Repositories ) Jetty/Starting/Downloads - Eclipsepedia Danach hab ich die jetty.zip runtergeladen und entpackt. Hab in der Umgebungsvariablen JETTY_HOME eingetragen. Und das kleine Tutorial ab "Setup Jetty and a first Web-bundle" druchgemacht. Jetty/Tutorial/Jetty-OSGi SDK - Eclipsepedia Wenn ich das Bundle starte bekomme ich immer als consolen Ausgabe nicht mehr aber mein jetty ist unter http://localhost:8080/test nicht zu erreichen. Mein Manifest sieht wie in dem Tutorial aus
Muss ich den Server manuell starten (start.jar) und die Anwendung deployen? Geändert von SirWayne (15.10.2010 um 10:54 Uhr) |
||
|
|
|
| #6 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 14.04.2006
Fachbeiträge: 1.570
Abgegebene Danke: 7
Erhielt 65 Danke für 65 Beiträge
|
Du denkst verkehrtrum. Du willst den Tomcat wie bisher starten und dort deine sachen deployen.
Wir sind aber hier in OSGi. Du Startest das OSGi Framework in in dem Framework startest du Tomcat - nicht umgekehrt. Dazu hat Spring den normalen Tomcat einfach verbundled. Damit er auch gestartet wird, wird in dem catalina.start.osgi-1.0.0.jar bundle per java code der server erstellt. Da kommt dann schon die nexte Antwort auf deine Frage: in dem tomcat.config fragment ist die server.xml von tomcat enthalten. Da sich bundles und fragmente den gleichen classloader teilen, kann das catalina.start.osgi-1.0.0.jar bundle auf die server.xml des fragments zugreifen und so den tomcat konfigurieren. Da ist z.b. der Port drinnen. Jetzt ist der Server gestartet. Aber wie schauts aus mit den webapps? Dazu wird zunächst noch der StandardService (StandardService (Tomcat API Documentation) <- der hier) vom catalina.start.osgi-1.0.0.jar bundle veröffentlicht. Jetzt hast du in der OSGi Registry den StandardService vom Tomcat, mit dem du quasi alles machen kannst. Damit du jetzt nicht selber hergehn muss und dir den Service holst, die webapp registrierst etc. hat spring den WebExtender geschrieben. Der geht her und scannt alle Manifests aller bundles. Tauchen dort die EInträge Web-ContextPath und Module-Type : Web auf, weiß der extender dass es sich um eine webapp handelt. Ergo wird es als webapp deployed. Nun zum Thema jetty: Jetty kann man einfacher in eine Java - App integrieren. Aber: Wenn du nicht die Spring version verwendest, wird der Jetty im normalfall (z.b. bei der Eclipse distribution [womit z.b. das Help-System gemacht wird]) in form des HttpService (HttpService (OSGi Service Platform Release 4 Version 4.2)) registriert. Sieht auf den ersten blick nicht schlimm aus, du kannst Servlets registrieren. Jetzt kommt das große aber: 1. du musst dir den service selber holen und deine servlets registrieren (oder über plugin.xml) 2. die web.xml wird NICHT ünterstützt: keine authentifizierung, keine filter, keine listener, keine jsps, NICHTS Jetzt gibt es noch den pax-web-extender, der kann ein bischen mehr. Pax Web - OPS4J aber auch er kann nicht alles. Deshalb veröffentlich Spring in den tomcat/jetty bundles aus ihrem repo den jeweiligen service, mit dem man _alles_ machen kann, was in der web.xml ist. Ich hoffe es war verständlich
|
|
|
|
| Danke sagt: |
SirWayne (16.10.2010)
|
| #7 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Ja okay danke, habe mir schon fast gedacht dass ich irgendwo einen Denkfehler drin hatte.
Also das heißt wenn ich das OSGi Framework hochfahre kümmert sich dieses darum den Server zu starten? Okay zum Thema Jetty oder Tomcat, welcher ist geeigneter für den Einstieg? Ich versuch grad den Jetty zu benutzen muss ich dann beim Spring Repo irgendwas runterladen? Aber was ich noch nicht versteh ich hab das Tutorial gemacht. Das OSGi Framework hochgefahren aber der Jetty ist nicht erreichbar. Jetty/Tutorial/Jetty-OSGi SDK - Eclipsepedia |
|
|
|
| #8 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 14.04.2006
Fachbeiträge: 1.570
Abgegebene Danke: 7
Erhielt 65 Danke für 65 Beiträge
|
Das ist ein feature von den spring dm bundles. Die standard Jetty Version macht das nicht automatisch
ich lad dir mal meinen workspace hoch, da ist alles drinn, dann startest du ihn und probierst mal rum
|
|
|
|
| #10 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 14.04.2006
Fachbeiträge: 1.570
Abgegebene Danke: 7
Erhielt 65 Danke für 65 Beiträge
|
verstehst du es nun? Ich hatte am Anfang auch erst den Jetty benutzt, und zwar den ganz normalen.
Aber dann funktioniert der Spring DM Web-Extender nicht. Wichtig ist, dass der funktioniert, da ansonsten die webapps nicht automatisch deployed werden. (wenn das webappbundle gestartet wurde). Die Spring DM distribution hat aber sowohl eine tomcat, als auch eine jetty Version dabei. Was du noch ausprobieren könntest ist die klasse als OSGi Service (Catalina StandardService bei Tomcat) zu veröffentlichen, welche der spring web-extender benötigt. Welche das beim jetty ist kann ich dir aber net auf anhieb sagen. (mit der spring mitgelieferten version ausprobieren und in der osgi konsole nach dem service schaun) Dann könntest du z.b. auch die jetty-hightide version ausprobieren, die hat jsp support dabei und noch einiges mehr. Ich brauche keine jsps, von daher hab ichs noch nicht ausprobiert. Es gibt aber auch aktuellere versionen von tomcat im spring bundle repo Noch ein tipp am rande: Apache Felix - Apache Felix File Install das ist ein sehr nützliches kleines bundle. denn anders als unter eclipse (launch config) werden normalerweise bundles nicht automatisch gestartet. Da müsstest du normalerweise alle bundles in die config.ini aufnehmen, was bei >50 bundles schon keinen spaß mehr macht. Außerdem kannst du mit dem bundle dann quasi hot deployment machen. Jar austauschen und gut ist. Das war aber auch schon in dem ersten workspace mit dem binary dabei, den ich dir mal gegeben hab. Geändert von raiL (17.10.2010 um 17:13 Uhr) |
|
|
|
| Danke sagt: |
SirWayne (17.10.2010)
|
| #11 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Nee konnte es noch nicht anschaun, war übers we nicht daheim. Aber werd ich in der Laufe der Woche nachholen.
Ich benötige auch keine jsp ich will ja nur das Spring Remoting für meine eclipseRCP verwenden. |
|
|
|
| #12 (permalink) | |||
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Okay hier mal meine 1ten Fragen
. Erstmal danke nochmal dass du dir soviel Mühe gemacht hast.1. Ich hab es ohne Mühe zum Laufen gebracht. Aber unter http://localhost:8080/hello habe ich keine Seite angezeigt bekommen? Dazu ist mir die Zeile in der server.xml aufgefallen: Heißt das die Anwendung ist noch nicht deployed oder übernimmt genau das jetzt derspring-osgi-web-extender ?
2. Die catalina jars sind das die aus dem Spring DM distrubution? Das heißt wenn ich nen Jetty benutzen wollen würde müsste ich die jars austauschen und das tomcat config Bundle? 3. Was ich auch nicht richtig durchschaut habe wie man so ne . launch Datei anlegen kann? Das macht du nicht von Hand oder? 4. Was ist das osgi_R4_compendium-1.0.jar? |
||
|
|
|
| #13 (permalink) | |||
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Okay grad mal die Spring DM with dep runter geladen und seh die Jetty jars. Mal mitaufnehmen in die target platform.
Gibts eigentlich irgendo ne Seite für Vor/Nachteile Jetty und Tomcat? Muss ich bei Jetty anstatt der server.xml die jetty.xml verwenden? Also ich hab jetzt mal die jetty.xml verwendet und bekomm das als Ausgabe in der osgi console
wenn ich nun auf http://localhost:8080/hello gehe dann bekomme ich folgende exception Geändert von SirWayne (18.10.2010 um 12:55 Uhr) |
||
|
|
|
| #14 (permalink) | |||||||||||||||||||||||||||||||
|
Stammbenutzer
Megabyte
Registriert seit: 14.04.2006
Fachbeiträge: 1.570
Abgegebene Danke: 7
Erhielt 65 Danke für 65 Beiträge
|
1. Beitrag
Zu 1.: Quizfrage: wenn du ein zweites web-bundle hast, was glaubst du wohin es deployed wird? ![]() Du hast den Betrag von oben nicht genau genug gelesen. Code:
Web-ContextPath: web dann ist es unter localhost:8080/web/hello erreichbar. Der Port ist der aus der server.xml. Und nein das autodeploy musst du nicht auf true setzen, das macht der web-extender.
2. Ja, das sind die die bei der Spring DM Distribution dabei sind (im folder libs oder so) Wenn du den jetty willst musst du nur die bundles austauschen (sind analog zum jetty glaub ich 2) Das Fragment mit der server.xml für den tomcat macht dann natürlich keinen sinn mehr. 3. So ne launch konfiguration erzeugst du unter Eclipse, in dem du bei run-as eine neue osgi-framework konfig erzeugst. Mit Export -> Launch configuration (rechts auf irgendein projekt clicken) kannst du die als datei exportieren. 4. Die OSGi-Compendium jar enthält die offizielle API für diverse OSGi Standard-Services. Das wären unter anderem der LogService, der ConfigAdmin und noch ein paar andere. Eine Implementierung ist in diesem Fall nicht dabei. Schaust du dir aber mal den 1. workspace an den ich dir mal hochgeladen hab, findest du das im binary. Ist dann nämlich z.b. org.eclipse.equinox.cm_1.0.200.v20100520.jar, was die implementierung von Equinox bzw Eclipse ist. 2. Beitrag ja du musst die jetty.xml statt der server.xml nehmen. Die Web.xml ist die gleiche. Jetty bietet noch die möglichkeit an, eine jetty-web.xml zu verwenden, da kann man noch ein bischen mehr machen (brauch man aber normalerweise nicht bzw. lässt sich mit der server.xml bei tomcat abbilden. Die jetty.xml musst du natürlich an den jetty attachen (Fragment-host). Welches das ist kann ich dir nicht sagen, da ich das noch nicht ausprobiert habe. Sollte aber analog das jetty-start bundle sein.
// Edit: noch zu tomcat vs. jetty: Das ist eine Entscheidung die ihr selber machen müsst. Das hat eigentlich nix damit zu tun, ob es in OSGi läuft oder nicht. Artikel gibts dazu genug im Netz. Was man noch sagen kann ist, dass Tomcat in dieser Version soweit ich weiß noch nicht java.nio verwendet. Jetty hingegen schon. Wenn es um das letzte bischen Performace geht, ist das vielleicht ein Argument für Jetty. Aber du kannst auch mal eine neuere Version von Tomcat aus dem Bundle Repo versuchen. Bei unserer App kann man das vernachlässigen. Geändert von raiL (18.10.2010 um 18:50 Uhr) |
||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||
| Danke sagt: |
SirWayne (19.10.2010)
|
| #15 (permalink) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Denk mal das 2te Bundle wird zum Web-ContextPath deployed ![]()
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #16 (permalink) | |||||||||||
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Sagt jemand was die Fehlermeldung
Also meine Server XML sieht so aus: applicationContext.xml
remoting-servlet.xml
web.xml
Und auf der clienSeite
Geändert von SirWayne (19.10.2010 um 13:35 Uhr) |
||||||||||
|
|
|
| #18 (permalink) | |||
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Perfekt jetzt klappts gut die Fehlermeldung muss ich mir merken dass bei der imports fehlen^^...
Ah eine Frage hab ich noch?! Wie starte ich denn die ganze Sache nicht aus Eclipse raus? Also meinen RCP bekomme ich gebaut und kann ihn ausführen wie läuft das mit dem OSGi Container? EDIT: Seit ich alles in meinen eigenen workspace ausgeführt habe. Bekomme ich immer die Meldung
Was könnte mir den fehlen? Ich hab ein log4j fragment... In meiner launch habe ich das org.springframework.osgi.log4j.osgi aufgenommen Geändert von SirWayne (20.10.2010 um 16:39 Uhr) |
||
|
|
|
| #19 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 14.04.2006
Fachbeiträge: 1.570
Abgegebene Danke: 7
Erhielt 65 Danke für 65 Beiträge
|
Mit dem Build Prozess (automatisiert) kann ich dir leider nicht helfen, das macht bei uns gerade ein anderer.
Aber was du machen kannst ist in Eclipse -> export -> deployable plugins and fragments. Als Runtime nimmst du idealerweise Apache Felix Karaf (ehemals ServiceMix Kernel) Apache Felix - Apache Felix Karaf Oder du nimmst den plain container aus dem Anhang, da musst du nur deine bundles in den bundles Ordner schmeißen. Gestartet werden sie automatisch. equinox 3.6.zip ... at ul.to - Free File Hosting, Free Image Hosting, Free Music Hosting, Free Video Hosting, ... |
|
|
|
| #20 (permalink) | |
|
Stammbenutzer
Viertel Gigabyte
Themenstarter
Registriert seit: 29.05.2007
Fachbeiträge: 4.932
Abgegebene Danke: 192
Erhielt 229 Danke für 225 Beiträge
|
Okay werd ich mal ausprobieren denke automatisiert muss am anfang nicht sein soweit passt es mal.
Noch ein Tip für das log4j Fragement? Irgendwie habe ich unsere beiden Versionen verglichen finde kein Unterschied aber klappt einfach nicht. |
|
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| OSGi, Spring, RCP | MQue | Plauderecke | 16 | 25.08.2010 20:38 |
| Spring mit OSGi, aber welcher JPA Provider? | t.stein | Application Tier | 8 | 21.07.2010 13:13 |
| OSGi und Spring | Generic1 | Allgemeine Java-Themen | 19 | 09.03.2010 12:09 |
| tuscany vs spring remoting | ARadauer | Allgemeine Java-Themen | 1 | 16.04.2009 13:55 |
| midle tier spring rmi remoting - security | ARadauer | Allgemeines EE | 2 | 07.09.2008 22:01 |
| Lesezeichen |
|
|