28
XML IV: Cocoon 2

XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Embed Size (px)

Citation preview

Page 1: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

XML IV: Cocoon 2

Page 2: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

The Reactor PatternDas Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen.

Handleowns

dispatches*

notifies**

handle set

Reactor

handle_events()register_handler()remove_handler()

Event Handler

handle_event ()get_handle()

Concrete Event Handler A

handle_event ()get_handle()

Concrete Event Handler B

handle_event ()get_handle()

SynchronousEvent Demuxer

select ()

<<uses>>

Page 3: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

The Reactor Pattern

: Main Program : Concrete

Event Handler

: Reactor : Synchronous

Event

Demultiplexer

register_handler()

get_handle()

handle_events()select()

handle_event()

Handle

Handles

Handles

Con. Event

HandlerEvents

service()

event

Page 4: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Architektur

Servlet Container

Webserver

DBwml html pdf

Serializer Transform Generator

Page 5: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Pyramiden Modell von Web Verträgen

Management: Pfade, Verteilung, Regeln, Organisation

Logic: dynamische Generierung

Content: Seiten Inhalt

Style: Layout

Page 6: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Grundkonzept Pipeline

Umleitung nach Muster

Erzeugung des XML Dokuments

Transformation

Ausgabe, Erzeugung von spez. Formaten (html, pdf, wml, usw.)

Page 7: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Pipeline

Page 8: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Architektur

Core:configuration,threading, context, caching, pipeline handling,program generation, compilation, loading and execution.

Components:generators, transformers

matchers, serializers

Page 9: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Action

JAVA Pro

gram

Sitemap<?xml version="1.0"?> <map:sitemap xmlns:map=

"http://apache.org/cocoon/sitemap/1.0">

<map:components/>

<map:views/>

<map:resources/>

<map:pipelines/>

<map:action-sets/>

</map:sitemap>

Page 10: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Sitemap II

<map:components> <map:generators/> <map:transformers/> <map:serializers/> <map:readers/> <map:selectors/> <map:matchers/> <map:actions/>

</map:components>

Action

JAVA Pro

gram

Page 11: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Anwendung Legi

1.) Legi Daten von Studenten in

ausgeben.

xml html legi_html.xsl

xml pdf legi_pdf.xsl

xml ps ?

xml wml legi_wml.xsl

Page 12: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Sitemap Legi I<?xml version="1.0"?><map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <!-- =========================== Components ================================ --> <map:components> <map:generators default="file"/> <map:transformers default="xslt"/> <map:readers default="resource"/> <map:serializers default="html"/> <map:selectors default="browser"/> <map:matchers default="wildcard"/>

<map:serializer name="fo2ps" src="org.apache.cocoon.serialization.FOPSerializer" mime-type="application/postscript"/> <map:serializer name="fo2pdf" src="org.apache.cocoon.serialization.FOPSerializer" mime-type="application/pdf"/> <map:serializer name="wap" mime-type="text/vnd.wap.wml" src="org.apache.cocoon.serialization.XMLSerializer"> <doctype-public>-//WAPFORUM//DTD WML 1.1//EN</doctype-public> <doctype-system>http://www.wapforum.org/DTD/wml_1.1.xml</doctype-system> <encoding>ASCII</encoding> <omit-xml-declaration>yes</omit-xml-declaration> </map:serializer> </map:components> <!-- =========================== Pipelines ================================= -->

Page 13: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Sitemap Legi II… <map:match pattern="*.*.html"> <map:generate src="xml/{1}.{2}.xml"/> <map:transform src="xsl/legi_html.xsl"/> <map:serialize type="html"/> </map:match> <map:match pattern="*.*.pdf"> <map:generate src="xml/{1}.{2}.xml"/> <map:transform src="xsl/legi_pdf.xsl"/> <map:serialize type="fo2pdf"/> </map:match> <map:match pattern="*.*.ps"> <map:generate src="xml/{1}.{2}.xml"/> <map:transform src="xsl/legi_pdf.xsl"/> <map:serialize type="fo2ps"/> </map:match> <map:match pattern="*.*.wml"> <map:generate src="xml/{1}.{2}.xml"/> <map:transform src="xsl/legi_wml.xsl"/> <map:serialize type="wap"/> </map:match> …

Page 14: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Anwendung Portalseite

Alle Dienste einer Seite sollen aufgelistet werden.

1.) ““ welcome

2.) welcome samples.xml simple-samples2html.xsl html

3.) Sitemap für Links

Page 15: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

samples.xml

<?xml version="1.0" encoding="iso-8859-1"?>

<samples xmlns:xlink="http://www.w3.org/1999/xlink">

<group name="Multimedia Hello World"> <sample name="HTML" href="hello.html"> This is a very simple demonstration of how to use

Cocoon. A simple XML page is transformed into an HTML page. </sample> <sample name="WML" href="hello.wml"> Now something more juicy: the exact same page is

translated into WAP WML. </sample><sample name="SVG" href="hello.svg"> Need a fancier look? No problem, SVG is your friend. </sample>…

Page 16: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Sitemap <map:pipeline> <map:match pattern=""> <map:redirect-to uri="welcome"/> </map:match>

<map:match pattern="welcome"> <map:generate src="docs/samples/samples.xml"/> <map:transform src="stylesheets/simple-samples2html.xsl"/> <map:serialize/> </map:match>

<map:match pattern="hello.html"> <map:generate src="docs/samples/hello-page.xml"/> <map:transform src="stylesheets/page/simple-page2html.xsl"/> <map:serialize type="html"/> </map:match>

<map:match pattern="hello.wml"> <map:generate src="docs/samples/hello-page.xml"/> <map:transform src="stylesheets/page/simple-page2wml.xsl"/> <map:serialize type="wap"/> </map:match>

Page 17: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Browser spezifische Seite

<map:select> <map:when test="wap"> <map:transform src="stylesheets/simple-samples2wap.xsl"/> </map:when> <map:when test="netscape"> <map:transform src="stylesheets/simple-samples2netscape.xsl"/> </map:when> <map:otherwise> <map:transform src="stylesheets/simple-samples2html.xsl"/> </map:otherwise> </map:select>

Page 18: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

eXtensible Server Pages (XSPs)

Analog zu JSP

nur Trennung von

• Code

• Logic

• Presentation

Page 19: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

eXtensible Server Pages (XSPs)

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsp:page language="java" xmlns:xsp="http://apache.org/xsp">

<xsp:logic>

static private int counter = 0;

private synchronized int count()

{

return counter++;

}

</xsp:logic>

<page>

<p>I have been requested <xsp:expr>count()</xsp:expr> times.</p>

</page>

</xsp:page>

Page 20: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

XSP Bsp. II<?xml version="1.0" encoding="ISO-8859-1"?><xsp:page language="java" xmlns:xsp="http://apache.org/xsp" xmlns:xsp-request="http://apache.org/xsp/request/2.0" xmlns:log="http://apache.org/xsp/log/2.0" xmlns:capture="http://apache.org/cocoon/capture/1.0">

<page> <log:logger name="xsp-sample" filename="xsp-sample.log"/> <log:debug>jax: start jax page</log:debug>

<title>A Simple XSP Page</title>

<content>

<capture:fragment-variable name="page_part"> <para>These 2 paragraphs were generated at the start of the XSP, and captured for insertion at the

end.</para>

<para>Brought to you by Cocoon2 at <xsp:expr>new Date()</xsp:expr>.</para> </capture:fragment-variable> <para>I was requested as the URI: <b><xsp-request:get-uri as="xml"/></b></para>

Page 21: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

XSP Bsp. II <para>The following list was dynamically generated:</para> <ul> <xsp:logic> <![CDATA[ for (int i=0; i<3; i++) { ]]> <li> Punkt: <xsp:expr>i</xsp:expr> </li> <![CDATA[ } ]]> </xsp:logic> </ul>

<xsp-request:get-parameter-values name="name"/> <xsp-request:get-parameter-names/> <para> Header "user-agent" as String: <xsp-request:get-header name="user-agent"/> </para> <xsp:expr>page_part</xsp:expr> </content> <log:debug>Processing the end of the JAX page</log:debug> </page></xsp:page>

Page 22: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Links

http://carnagepro.com/samples/

http://www.snow-news.com/

http://miwis.framkom.se/cocoon/documents/livesites.html

Praktikum

1. Installation Cocoon

2. Legi mit pdf,html, wml Ausgabe

3. einfach XSP-Seite

Page 23: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Download Tomcat 4.0

Page 24: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Installieren

Page 25: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Ordner Struktur

Page 26: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Download Cocoon

Page 27: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Extracting cocoon.war

Apache Tomcat 4.0\webapps

Page 28: XML IV: Cocoon 2. The Reactor Pattern Das Reactor Pattern ermöglicht Demultiplexing und Verteilung von Service Requests bei ereignisgesteuerten Anwendungen

Test: Start Tomcat