{"id":302,"date":"2021-01-28T11:25:43","date_gmt":"2021-01-28T10:25:43","guid":{"rendered":"https:\/\/informatik.htwk-leipzig.de\/seminar\/?p=302"},"modified":"2021-06-11T09:40:36","modified_gmt":"2021-06-11T07:40:36","slug":"java-application-server","status":"publish","type":"post","link":"https:\/\/informatik.htwk-leipzig.de\/seminar\/lehrveranstaltungen\/betriebliche-informationssysteme\/2021\/java-application-server\/","title":{"rendered":"Java Application Server"},"content":{"rendered":"<h1>Java Application Server<\/h1>\n<p>Ein Softwaresystem zum Ausf\u00fchren von Anwendungssoftware. Schwerpunkt dieses Artikels sind dabei die Java Application Server. Dabei werden wir auf einzelne Bestandteile des Java EE Standards eingehen.<\/p>\n<h2>Gliederung<\/h2>\n<ol>\n<li>Das Konzept Application Server<\/li>\n<li>Java EE\n<ol>\n<li>Web Services<\/li>\n<li>EJB<\/li>\n<li>JDBC<\/li>\n<li>JPA<\/li>\n<\/ol>\n<\/li>\n<li>Beispiel: Wildfly Application Server<\/li>\n<li>Aktualit\u00e4t<\/li>\n<li>Quellen<\/li>\n<\/ol>\n<h1>1. Konzept Application Server<\/h1>\n<p>Application Server (auch <em>Anwendungsserver<\/em>) stellen Dienste zur Verf\u00fcgung. Dabei handelt es sich zum Beispiel um Transaktionsdienste, Authentifizierung, Persistenz, verschiedene Webservices und auch Load Balancing. Die Liste der vorhandenen Services h\u00e4ngt vom konkreten Application Server ab und wird teilweise in Standards definiert (Java EE\/ .NET &#8230;). Bekannte Gruppen von Application Servern sind die .NET Systeme, der SAP NetWeaver, verschiedene PHP Server und die Gruppe der Java EE Server. W\u00e4hlt man einen Properit\u00e4ren Application Server ist man an die zur Verf\u00fcgung gestellten Anwendungen und an die Instandhaltung der Software durch den entsprechenden Anbieter gebunden. Die Java EE Platform beitet einen offenen Industriestandard f\u00fcr Application Server, der es Entwicklern erm\u00f6glicht Anwendungen f\u00fcr mehrere Systeme zu erstellen. Dementsprechend basieren sehr viele der open-source Anwendungen f\u00fcr Application Server auf Java EE.<br \/>\nDieser Artikel wird sich auf die Vorstellung einiger Grundkonzepte und Dienste der Java EE Application Server beschr\u00e4nken. Wird in folgenden Abs\u00e4tzen von\u00a0<em>Application Servern\u00a0<\/em> geschrieben werden damit\u00a0<em>Java Application Server<\/em>\u00a0gemeint.<\/p>\n<p>&nbsp;<\/p>\n<h1>2. Java EE<\/h1>\n<figure id=\"attachment_311\" aria-describedby=\"caption-attachment-311\" style=\"width: 218px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-311\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/01\/java_ee.png\" alt=\"Java EE Logo\" width=\"218\" height=\"232\" \/><figcaption id=\"caption-attachment-311\" class=\"wp-caption-text\">Java EE Logo<\/figcaption><\/figure>\n<p>Die Java Enterprise Edition (<em>Java<\/em> EE) ist im Gegensatz zur Java Standard Edition (<em>Java SE<\/em>) nur f\u00fcr die Entwicklung von Software f\u00fcr Server gedacht. Java EE Anwendungen k\u00f6nnen meist in folgende vier Schichten unterteilt werden:<\/p>\n<ol>\n<li>Client-Schicht<\/li>\n<li>Web-Schicht (auch Kommunikationsschicht)<\/li>\n<li>Verarbeitungschicht (Business-Logik)<\/li>\n<li>Persistenzschicht<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h1>2.1. Web Services<\/h1>\n<p>F\u00fcr Webservices bietet die Java EE Plattform verschiedene Modelle. Diese unterscheiden sich in ihrer Flexibilit\u00e4t und Programmierung. Die erste und simpelste M\u00f6glichkeit einen Webservice zu erstellen ist das <strong>Servlet<\/strong>. Ein Servlet ist eine sich von <code>HttpServlet<\/code> ableitende Klasse mit Methoden f\u00fcr verschiedene HTTP-Requests. So k\u00f6nnen nat\u00fcrlich HTML-Webseiten als String zur\u00fcckgesendet werden, allerdings auch alle anderen auf HTTP oder HTTPS basierenden Protokolle.<\/p>\n<p>Neben dem einfachen Servlet bietet Java EE auch\u00a0 <em>Java Server Pages,<\/em> kurz <strong>JSP<\/strong> an. Im Gegensatz zur Entwicklung einer Website als Java String Objekt kann hier Java in ein HTML-<\/p>\n<figure id=\"attachment_323\" aria-describedby=\"caption-attachment-323\" style=\"width: 423px\" class=\"wp-caption aligncenter aligcenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-323\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/01\/jsp.png\" alt=\"Konzept JSP\" width=\"423\" height=\"171\" \/><figcaption id=\"caption-attachment-323\" class=\"wp-caption-text\">Konzept JSP<\/figcaption><\/figure>\n<p>Dokument eingebettet werden. Diese Einrichtung macht die Entwicklung f\u00fcr gr\u00f6\u00dfere Webseiten einfacher, schlie\u00dflich ist die HTML Struktur so viel besser erkennbar. Unter der Haube wird eine solche JSP Datei (meist <code>xhtml<\/code>) in ein Java-Servlet umgewandelt. Das passiert w\u00e4hrend des Kompilierens,\u00a0 wodurch aus jeder <strong>JSP<\/strong> Seite genauso Bytecode wird wie bei einem normalen Servlet.<\/p>\n<p>Die dritte Variante zur Auslieferung von Webseiten mit Java EE Werkzeugen sind die <em>Java Server Faces<\/em>, kurz <strong>JSF. <\/strong>Die JSF beruhen auf den vorhergenannten Servlets und JSP Dateien. <strong>JSF\u00a0<\/strong>Webseiten k\u00f6nnen auch in annotiertem Java geschrieben werden. Die Implementierung folgt dem Model-View-Controller Pattern. Mit JSF wird auch der Lifecycle der einzelnen Komponenten und etwaige Navigationen zwischen den Seiten beschrieben.<\/p>\n<p>&nbsp;<\/p>\n<h1>2.2 EJB<\/h1>\n<p>Enterprise Java Beans sind standardisierte Komponenten, mit denen die Gesch\u00e4ftslogik auf dem Application Server umgesetzt werden kann.<br \/>\nEJBs werden in 3 Kategorien Eingeteilt:<\/p>\n<p><strong>Entity Beans<\/strong> werden Eingesetzt um den Datenbestand des Systems zu modellieren(vgl. Eintr\u00e4ge in einer Datenbank).<br \/>\nDie Persitenz der Entity Beans wird im Normalfall \u00fcber einen EJB-Container realisiert, kann bei Bedarf aber auch vom Entwickler selbst umgesetzt werden.<\/p>\n<p><strong>Session Beans<\/strong> setzen die Beziehungen und Vorg\u00e4nge zwischen den Entity Beans um. Man unterscheidet zwischen Stateless und Statefull Session Beans.<br \/>\n<em>Statefull Beans<\/em> speichern Informationen \u00fcber ihren eigenen Zustand, und k\u00f6nnen so bei einem Wiederholten Aufruf andere Ausgaben haben.<br \/>\nEine <em>Stateless Bean<\/em> dagegen wird bei jedem Aufruf mit den selben Parametern exakt das selbe Ergebnis liefern. Stateless Beans sind also statisch.<\/p>\n<p>Die dritte Kategorie sind die <strong>Message Driven Beans<\/strong>.<br \/>\n\u00dcber diese Komponente wird die Asynchrone Kommunikation des System realisiert.<br \/>\nMessage Driven Beans implementieren den Java Message Service (JMS) und erm\u00f6glichen es somit auch asynchrone Befehlsabarbeitung umzusetzen.<\/p>\n<h1>2.3 JDBC<\/h1>\n<p>Die <strong>Java Database Connectivity<\/strong> (JDBC) &#8211; API ist eine standardisierte Schnittstelle f\u00fcr Java Programme und Datenbanksysteme.<br \/>\nDurch ihre Implementierung ist es Anwendungen m\u00f6glich Verbindungen zu Datenbanken aufzubauen, Anfragen an Datenbanken zu senden und neue Eintr\u00e4ge in Datenbanken zu erstellen.<br \/>\nJeder Datenbank-typ, der einen JDBC-Treiber implementiert kann angesprochen werden.<\/p>\n<p>JDBC verf\u00fcgt auf der Anwendungsseite au\u00dferdem \u00fcber einen erweiterten <strong>Verbindungsmanager<\/strong>, der es erm\u00f6glicht mehrere Datenbank-Verbindungen gleichzeitig zu speichern und zu organisieren. Dies erm\u00f6glicht das erstellen von <strong>Connection-Pools<\/strong>, welche die Verbindungen zu Datenbanken offenhalten, anstatt sie nach jeder Anfrage wieder zu schlie\u00dfen. Methoden, die eine Anfrage senden \u00f6ffnen keine neue Verbindung zur Datenbank, sondern senden ihre Anfrage an den Pool, damit er sie weiterleiten kann. Au\u00dferdem verf\u00fcgt die JDBC \u00fcber einen <strong>Statement-Pool<\/strong>, in dem vorgefertigte SQL-Anfragen abgelegt werden k\u00f6nnen, um die Anfragezeit weiter zu verringern.<\/p>\n<p>Der Konkrete Aufruf der JDBC l\u00e4uft in 5 Phasen ab:<br \/>\nZuerst sucht der <strong>JDBC-Treibermanager<\/strong> eine Datenbank, die einen passenden JDBC-Treiber implementiert.<br \/>\nDanach wird die <strong>Verbindung zur Datenbank<\/strong> \u00fcber den gefundenen Treiber ge\u00f6ffnet.<br \/>\nAnschlie\u00dfend wird das entsprechende <strong>SQL-Statement<\/strong> an die Datenbank gesendet.<br \/>\nDie <strong>Antwort der Datenbank<\/strong> wird \u00fcber die JDBC an das Programm weitergeleitet.<br \/>\nJetzt ist das Statement abgeschlossen, und die <strong>Ressourcen<\/strong> k\u00f6nnen wieder <strong>freigegeben<\/strong> werden.<\/p>\n<p>&nbsp;<\/p>\n<h1>2.4 JPA<\/h1>\n<p>Damit die Objektorientierten Entit\u00e4ten eines Java-Programmes persistent in einem relationalen Datenbanksystem abgespeichert werden k\u00f6nnen muss eine eindeutige \u00dcbersetzung zwischen den beiden Konzepten implementiert werden. Zu diesem Zweck wird die <strong>Java Persistance API<\/strong> (JPA) eingesetzt.<br \/>\nDie JPA erm\u00f6glicht es Entwicklern die Eigenschaften und Methoden der objektorientierten Java-Entit\u00e4ten mithilfe von <strong>Annotationen<\/strong> als Relationale Eigenschaften und Beziehungen zu markieren. So k\u00f6nnen Eigenschaften einer Klasse, zum Beispiel mit der Annotation <code>@Id<\/code> als ein Prim\u00e4rschl\u00fcssel des Objektes gekennzeichnet werden.<br \/>\nSoll der Zustand der Entit\u00e4ten abgespeichert werden generiert die JPA mithilfe der Annotationen eine Folge von Datenbankbefehlen, die die \u00dcbersetzung von objektorientiert zu relational konkret umsetzen. Nat\u00fcrlich kann mithilfe der JPA der gespeicherte Zustand der Objekte auch wieder aus der Datenbank ausgelesen werden.<br \/>\nDank der zur verf\u00fcgung stehenden Annotationen (u.a. <code>@OneToOne<\/code>, <code>@OneToMany<\/code>) ist ein Entwickler in der Lage jede theoretisch m\u00f6gliche relationale Beziehung\u00a0 zwischen zwei Entit\u00e4ten zu simulieren.<\/p>\n<p>&nbsp;<\/p>\n<h2>Wildfly Application Server<\/h2>\n<p>Ein Vertreter der Java EE Application Server ist Wildfly. Wildfly ist die Community-Abspaltung vom kommerziellen JBoss von RedHat. JBoss und Wildfly sind sich dadurch und durch den Java EE Standard in der Handhabung recht \u00e4hnlich. F\u00fcr den Wildfly Application Server gibt es ein von den JBoss-Entwicklern gepflegtes Docker-Image namens\u00a0<a href=\"https:\/\/hub.docker.com\/r\/jboss\/wildfly\"><strong>jb<\/strong><\/a><\/p>\n<figure id=\"attachment_313\" aria-describedby=\"caption-attachment-313\" style=\"width: 320px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-313\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/01\/wildfly_icon.png\" alt=\"Wildfly Icon\" width=\"320\" height=\"95\" \/><figcaption id=\"caption-attachment-313\" class=\"wp-caption-text\">Wildfly Icon<\/figcaption><\/figure>\n<p><a href=\"https:\/\/hub.docker.com\/r\/jboss\/wildfly\"><strong>oss\/wildfly<\/strong><\/a>. Nat\u00fcrlich ist es nicht unbedingt praktikabel einen Application Server (welcher verschiedene Anwendungen in Container-\u00e4hnlichen Strukturen ausf\u00fchrt) in einem Container zu starten &#8211; f\u00fcr Demonstrationszwecke ist es aber eine schnelle und saubere L\u00f6sung. Eine vollst\u00e4ndige Docker-Installation vorausgesetzt, kann das Image mit diesem Kommando gestartet werden:<\/p>\n<p><code>docker run -p 8080:8080 -p 9990:9990 -it jboss\/wildfly \/opt\/jboss\/wildfly\/bin\/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0<\/code><\/p>\n<p>Bevor man die integrierte Weboberfl\u00e4che zur graphischen\u00a0 Konfiguration verwenden kann, muss ein Benutzerkonto angelegt werden. Dazu muss der nun laufende Container mittels docker exec konfiguriert werden. Bei <code>CONTAINER<\/code> handelt es sich um die Referenz auf den gestarteten Container (<code>docker ps<\/code> zum Anzeigen der laufenden Container), <code>NAME<\/code> ist der neue Benutzername und <code>PASSWORT<\/code> das Passwort.<\/p>\n<p><code>docker exec CONTAINER wildfly\/bin\/add-user.sh -u NAME -p PASSWORT -e -s<\/code><\/p>\n<figure id=\"attachment_317\" aria-describedby=\"caption-attachment-317\" style=\"width: 368px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-317\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/01\/wildfly_console.png\" alt=\"Adminkonsole Wildfly\" width=\"368\" height=\"404\" \/><figcaption id=\"caption-attachment-317\" class=\"wp-caption-text\">Adminkonsole Wildfly<\/figcaption><\/figure>\n<p><code><\/code><\/p>\n<p>Nun kann bei Installation auf dem lokalen Rechner unter der Adresse: <a href=\"http:\/\/localhost:8080\/\">http:\/\/localhost:8080\/<\/a><br \/>\nDie Webkonsole aufgerufen werden. Nach Anmeldung mit <code>NAME<\/code> und <code>PASSWORT<\/code> kann man nun als Admin seine laufenden Anwendungen auf dem Application Server verwalten. Dazu geh\u00f6rt das starten\/stoppen, die Konfiguration von Datenbanken und allen m\u00f6glichen Schnittstellen. Au\u00dferdem k\u00f6nnen Auslastung und Ressourcenverbrauch beobachtet werden.<\/p>\n<h3>Deployen einer Anwendung<\/h3>\n<p>Java EE Anwendungen k\u00f6nnen mit einer Vielzahl von IDEs entwickelt werden. Neben den JBoss Tool und einer Intellij-L\u00f6sung gibt es auch eine modifizierte Eclipse. Diese kostenfreie Eclipse names <em>&#8222;Eclipse IDE for Enterprise Java Developers&#8220;<\/em> wird hier in unserem kurzen Beispiel verwendet. Online gibt es zahlreiche Beispiel-Anwendungen zum herunterladen. Als besonders gut verst\u00e4ndlich und vollst\u00e4ndig erwies sich <a href=\"https:\/\/balusc.omnifaces.org\/2020\/04\/jsf-23-tutorial-with-eclipse-maven.html\">diese Erkl\u00e4rung<\/a>. Ist die eigene Anwendung bereit zum deployen auf dem Server kann diese in einem von der IDE verwaltetem Application Server gestartet werden. Will man seinen eigenen verwenden, bietet sich er Export als\u00a0<strong>war<\/strong>-Datei an. Diese kann zum Beispiel in der Web-Oberfl\u00e4che hochgeladen und gestartet werden.<\/p>\n<h2>Aktualit\u00e4t<\/h2>\n<p>Java Application Server gibt es schon eine ganze Weile, Vertreter wie etwa Tomcat seit 1999. Gerade in den letzten Jahren gibt es neuere Str\u00f6mungen wie Containervirtualisierung oder SaaS die L\u00f6sungen f\u00fcr Probleme bieten welche vorher mit Application Servern gel\u00f6st wurden. In diesem Abschnitt werden wir nicht beurteilen inwiefern Application Server durch andere Technologien abgel\u00f6st oder ersetzt werden, sondern Vorteile und Nachteile der verschiedenen Konzepte hervorheben.<\/p>\n<p>Sowohl mit SaaS Architekturen, Containervirtualisierung oder Application Servern lassen sich \u00e4hnliche Ziele erreichen. Nat\u00fcrlich sind genauso Kombinationen dieser Strukturen m\u00f6glich. Interessante Alternativen sind etwa: <strong>Docker, Kubernetes, Spring Boot<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2>Nachteile Application Server<\/h2>\n<p>Die\u00a0 Wahl der Programmiersprache ist eingeschr\u00e4nkt &#8211; gerade bei Java EE Application Servern ist kaum etwas anderes als Java anzutreffen. Dazu kommt die mitunter doch noch n\u00f6tige aufwendige Konfiguration \u00fcber XML-Dateien. Auch ist das \u00d6kosystem in welchem eine Anwendung l\u00e4uft mehr oder weniger festgelegt. Nat\u00fcrlich kann man \u00fcber diverse Schnittstellen andere Services nutzen, eine Integration der Java EE Standard-Dienste ist meist aber der einfachste Weg. Bei Container-virtualisierten Anwendungen hingegen kann der Entwickler jede beliebige Software einsetzen.\u00a0 Application Server sind auch nicht direkt geeignet um eine Anwendung mit Service-orientierter Architektur umzusetzen. Daf\u00fcr gab es den Ansatz eines leichtgewichtigen Application Server f\u00fcr SOA &#8211; <em>Wildfly Swarm<\/em>. Diese Projekt wird allerdings nicht mehr gepflegt.<\/p>\n<p>&nbsp;<\/p>\n<h2>Vorteile Application Server<\/h2>\n<p>Was einerseits ein Nachteil sein kann, sehen manche vielleicht als einen Vorteil. Das abgeschlossene \u00d6kosystem der Java EE Application Server ist sicher eine dieser Eigenschaften. Abh\u00e4ngigkeiten, Nachrichtenformate und Protokolle sind innerhalb von Java EE einigerma\u00dfen \u00fcbersichtlich. Die vielen im Standard integrierten Services erm\u00f6glichen einen Verzicht auf manchen externen Dienst.<\/p>\n<p>&nbsp;<\/p>\n<h1>Vortrag Folien<\/h1>\n<p><a href=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2021\/01\/Vortrag_Application_Server.pdf\">Vortrag_Application_Server<\/a><\/p>\n<p>&nbsp;<\/p>\n<h1>Quellen<\/h1>\n<p>Wikipedia, &#8222;Application server&#8220;: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Application_server\">https:\/\/en.wikipedia.org\/wiki\/Application_server<\/a>, Abruf 17.1.2021<\/p>\n<p>Docker Inc., &#8222;WildFly Docker image &#8211; Docker hub&#8220;: <a href=\"https:\/\/hub.docker.com\/r\/jboss\/wildfly\">https:\/\/hub.docker.com\/r\/jboss\/wildfly<\/a>, Abruf 20.1.2021<\/p>\n<p>Red Hat Inc., &#8222;Java EE moves to Eclipse&#8220;: <a href=\"https:\/\/www.redhat.com\/en\/blog\/java-ee-moves-eclipse\">https:\/\/www.redhat.com\/en\/blog\/java-ee-moves-eclipse<\/a>, Abruf 20.1.2021<\/p>\n<p>The Wildfly project, &#8222;WildFly 22 Final is now available&#8220;: <a href=\"https:\/\/www.wildfly.org\/\">https:\/\/www.wildfly.org\/<\/a>, Abruf 20.1.2021<\/p>\n<p>M\u00fcller-Hofmann, Frank &#8211; Hiller Martin &#8211; Wanner Gerhard, &#8222;Programmierung von verteilten Systemen und Webanwendungen mit Java EE&#8220;, ISBN=&#8220;978-3-658-10512-9&#8243;<\/p>\n<p>Rafael Benevides, &#8222;Why Kubernetes is The New Application Server&#8220;,\u00a0 <a href=\"https:\/\/developers.redhat.com\/blog\/2018\/06\/28\/why-kubernetes-is-the-new-application-server\/\">https:\/\/developers.redhat.com\/blog\/2018\/06\/28\/why-kubernetes-is-the-new-application-server\/<\/a>, Abruf 26.1.2021<\/p>\n<p>Bauke Scholtz, &#8222;JSF 2.3 tutorial with Eclipse, Maven, WildFly and H2&#8220;, <a href=\"https:\/\/balusc.omnifaces.org\/2020\/04\/jsf-23-tutorial-with-eclipse-maven.html\">https:\/\/balusc.omnifaces.org\/2020\/04\/jsf-23-tutorial-with-eclipse-maven.html<\/a>, Abruf 21.1.2021<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java Application Server Ein Softwaresystem zum Ausf\u00fchren von Anwendungssoftware. Schwerpunkt dieses Artikels sind dabei die Java Application Server. Dabei werden<\/p>\n","protected":false},"author":29,"featured_media":311,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[9,26,24,25,23,8,27],"class_list":["post-302","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-betriebliche-informationssysteme","tag-docker","tag-ejb","tag-java","tag-java-ee","tag-jpa","tag-server","tag-wildfly"],"_links":{"self":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/comments?post=302"}],"version-history":[{"count":29,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/302\/revisions"}],"predecessor-version":[{"id":557,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/302\/revisions\/557"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media\/311"}],"wp:attachment":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media?parent=302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/categories?post=302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/tags?post=302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}