<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/blog/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://www.cogito-ergo-blog.de/blog/index.php?/feeds/atom.xml" rel="self" title="Cogito Ergo Blog" type="application/atom+xml" />
    <link href="http://www.cogito-ergo-blog.de/blog/"                        rel="alternate"    title="Cogito Ergo Blog" type="text/html" />
    <link href="http://www.cogito-ergo-blog.de/blog/rss.php?version=2.0"     rel="alternate"    title="Cogito Ergo Blog" type="application/rss+xml" />
    <title type="html">Cogito Ergo Blog</title>
    <subtitle type="html">Technical articles related to Java, HomeCinema PCs</subtitle>
    <icon>http://www.cogito-ergo-blog.de/blog/templates/default/img/s9y_banner_small.png</icon>
    <id>http://www.cogito-ergo-blog.de/blog/</id>
    <updated>2009-07-28T21:04:35Z</updated>
    <generator uri="http://www.s9y.org/" version="1.1.3">Serendipity 1.1.3 - http://www.s9y.org/</generator>
    <dc:language>de</dc:language>

    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/41-Workflow-Engine-einmal-anders.html" rel="alternate" title="Workflow-Engine einmal anders" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2009-07-28T20:52:13Z</published>
        <updated>2009-07-28T21:04:35Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=41</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=41</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/41-guid.html</id>
        <title type="html">Workflow-Engine einmal anders</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                
<style type="text/css">
	<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
	-->
	</style>
<p style="margin-bottom: 0cm;">Schon in einigen Projekten war die
Herausforderung bestimmte Abläufe oder auch Prozesse
hochskalierbar, verlässlich ausführen zu können. Dabei kam dann
von den einen Projektverantwortlichen schnell der Ruf nach einer
Workflow-Engine, von den anderen eher das Gegenteil: Bloß keine
Workflow-Engine ....</p>

<p style="margin-bottom: 0cm;">Ich selbst bin auch nicht unbedingt ein
Freund von graphischer Programmierung oder geschwätzigem XML,
was fast schon Programmiersprache sein will, aber in fast jeder
Hinsicht unhandlicher ist als eine normale Programmiersprache
wie <a href="http://www.scala-lang.org/">Scala</a> oder Java.</p>

<p style="margin-bottom: 0cm;">Aus diesem Grund reizte mich die Idee
einen alternativen Ansatz zu versuchen. Da ich, wie gerade schon
erwähnt, kein Freund von in XML programmieren bin, sollte die
Beschreibung des Prozesses - das Prozessmodell  in Java
erfolgen.</p>

<p style="margin-bottom: 0cm;">Hier bietet sich das <a href="http://de.wikipedia.org/wiki/Zustand_(Entwurfsmuster)">State-Pattern</a> an,
welches eine Prozessablauf mit Hilfe von Zustandsobjekten und einem
Kontext beschreibt. Konkret werden also nur Interfaces bzw. abstrakte
Basisklassen benötigt, die von einem konkreten Prozess implementiert
werden. Dazu der Contract der den Ablauf / die Semantik
beschreibt und schon kann ein Prozess statt in XML in Java
geschrieben werden.</p>

 <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/41-Workflow-Engine-einmal-anders.html#extended">"Workflow-Engine einmal anders" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/38-JBoss-Seam-mit-Mondrian-OLAP.html" rel="alternate" title="JBoss Seam mit Mondrian OLAP" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-09-30T21:29:19Z</published>
        <updated>2008-10-02T17:19:59Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=38</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=38</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/38-guid.html</id>
        <title type="html">JBoss Seam mit Mondrian OLAP</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                
<p>Der <a href="http://mondrian.pentaho.org/" target="_blank">Mondrian </a>OLAP Server, der seit einer Weile zur Pentaho-Suite gehört, kann mit einer recht leistungsfähigen Implementierung von Data-Cubes und der <a href="http://msdn.microsoft.com/en-us/library/ms145514.aspx" target="_blank">MDX</a>-Abfragesprache aufwarten.</p><p>Allerdings kommt die mitgelieferte Oberfläche etwas altbacken daher. <a href="http://jpivot.sourceforge.net/" target="_blank">JPivot </a>und auch das Charting machen für meine Begriffe nicht viel her. Auch die eingesetzte Web-Technologie ist eher von gestern: JSPs und Taglibs oder ein selten genutztes Web Framework <a href="http://jpivot.sourceforge.net/wcf/index.html" target="_blank">WCF</a>.</p><p>Da wurde bei mir schnell der Wunsch wach, Mondrian in <a href="http://www.seamframework.org/" target="_blank">JBoss SEAM</a> zu integrieren und die Chart evtl. mit <a href="http://teethgrinder.co.uk/open-flash-chart/" target="_blank">Open Flash Chart</a> etwas aufzupeppen.</p><p>Der folgende Artikel zeigt den ersten Versuch, ein Anfang ist also gemacht.</p>
 <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/38-JBoss-Seam-mit-Mondrian-OLAP.html#extended">"JBoss Seam mit Mondrian OLAP" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/37-Richtiges-Many-To-Many-mit-Grails.html" rel="alternate" title="Richtiges Many-To-Many mit Grails" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-08-01T18:54:43Z</published>
        <updated>2008-11-12T14:22:55Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=37</wfw:comment>
    
        <slash:comments>8</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=37</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/37-guid.html</id>
        <title type="html">Richtiges Many-To-Many mit Grails</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                
<p style="margin-bottom: 0cm;">Will man mit GRAILS ein
Real-World-System beschreiben und dabei das schnelle Erstellen von
CRUD-Applikationen nutzen, steht man schnell vor dem Problem dass
damit Many-To-Many Verknüpfungen nicht gehen.</p>

<p style="margin-bottom: 0cm;">Es wird zwar angeboten, wie bei
One-To-Many, aber wenn Add ... gewählt wird, kann zwar ein
neues Child angelegt werden, aber die Verbindung wird nicht
hergestellt.</p>

<p style="margin-bottom: 0cm;">Auch beim One-To-Many gibt es auf der
Many-Side Einschränkungen: es kann nur ein Child per Add ...
hinzugefügt werden. Weder wird das Zuordnen eines bereits
angelegten Childs ermöglicht, noch wird das Löschen
angeboten.</p><p style="margin-bottom: 0cm;">
</p><p style="margin-bottom: 0cm;">Ausserdem ist die Doku nicht
konsistent: Beim Domain-Mapping mit GORM heißt es: 
</p>

<p style="margin-left: 1.25cm; margin-bottom: 0cm;">Grails supports
many-to-many relationships by defining a <code>hasMany</code> on both
sides of the relationship and having a <code>belongsTo</code> on the
side that owns the relationship.</p>

<p style="margin-bottom: 0cm;">Richtig ist aber das  <code>belongsTo</code>
gehört auf die Child-Side, nicht auf die Parent-Side, so wie es
auch im zugehörigen Beispiel ist.</p>

<p style="margin-bottom: 0cm;">Wichtig ist hier nämlich:</p>

<p style="margin-left: 1.25cm; margin-bottom: 0cm;">The owning side
of the relationship, in this case <code>Author</code>, takes
responsibility for persisting the relationship and is the only side
that can cascade saves across.</p>

<p style="margin-bottom: 0cm;"><br />Also nur die Parent-Side hat den
Cascading-Save und somit sollte nur von dort aus geändert
werden. Jedenfalls werden nur die von der Parent-Side ausgemachten
Änderungen ohne weiteres persistiert. Würde man von der
Client-Side aus ändern, dann müßte die zugehörige
Änderung im Parent explizit gesetzt und persistiert werden.</p>

<p style="margin-bottom: 0cm;">Um die Unterstützung für
Many-To-Many in den mit Scaffolding generierten Views zu bekommen,
sind die Templates anzupassen. Wie das geht beschreibt der folgende
Artikel.</p>

 <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/37-Richtiges-Many-To-Many-mit-Grails.html#extended">"Richtiges Many-To-Many mit Grails" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/36-BartPE-fuer-Akoya-Mini-vom-USB-Stick.html" rel="alternate" title="BartPE für Akoya Mini vom USB-Stick" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2008-07-10T17:35:36Z</published>
        <updated>2008-07-10T19:36:19Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=36</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=36</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/5-Netbook" label="Netbook" term="Netbook" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/36-guid.html</id>
        <title type="html">BartPE für Akoya Mini vom USB-Stick</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Für die neuen Netbooks ein Notfall-System zu haben ist nicht so einfach wie man zunächst denkt: es fehlt ja das optische Laufwerk.
</p>
<p>
Damit sind sämtliche Notfall-CDs wie Knoppix oder BartPE, die noch im Schrank liegen, erst mal wertlos. Inzwischen booten aber auch alle Systeme von USB, so auch das neue Akoya mini Netbook. Also schnell das gewünschte BartPE System auf USB übertragen (siehe FAQ bzw. pe2usb.txt im aktuellen BartPE) und los.
</p>
<p>
Bootet auch, alles bestens, nur leider ist die Harddisk nicht zu finden: Die interne SATA-Platte braucht einen Treiber, damit WinXP darauf zugreifen kann.
</p>
<p>
Um dieses Problem zu umschiffen, mußte ich eine ganze Weile rumgoogeln, bis klar war wie's geht, deshalb hier kurz die Schritt für Schritt Anleitung.
</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/36-BartPE-fuer-Akoya-Mini-vom-USB-Stick.html#extended">"BartPE für Akoya Mini vom USB-Stick" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/35-Spring-und-jBPM.html" rel="alternate" title="Spring und jBPM" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-10-11T20:53:21Z</published>
        <updated>2007-10-11T21:38:37Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=35</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=35</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/35-guid.html</id>
        <title type="html">Spring und jBPM</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Zwar gibt es mit den <a href="https://springmodules.dev.java.net/ ">Spring-Modules</a> bereits Support für die Verwendung von Spring zusammen mit <a href="http://www.jboss.com/products/jbpm">jBPM</a>, aber die Verwendung von Spring-Beans als Actions mit Hilfe des Delegate von Spring-Modules ist etwas umständlich:
<blockquote style="border: 1px solid gray; overflow: auto; font-size: 100%; height: 110px; background-color: rgb(238, 238, 238);"><pre style="font-size:120%">
&lt;action name="myAction" config-type="bean" 
            class="org.springmodules.workflow.jbpm31.JbpmHandlerProxy"&gt;
    &lt;targetBean&gt;jbpmAction&lt;/targetBean&gt;
    &lt;factoryKey&gt;jbpmConfiguration&lt;/factoryKey&gt;
&lt;/action&gt;
</pre></blockquote>
</p>
<p>Es muss also jedesmal der ProxyHandler hingeschrieben werden und die Target-Bean konfiguriert werden, das sieht doch sehr unschön aus. Meine Vorstellung war eher eine Action-Definition wie diese:
<blockquote style="border: 1px solid gray; overflow: auto; font-size: 100%; height: 40px; background-color: rgb(238, 238, 238);"><pre style="font-size:120%">
&lt;spring-action bean="myAction" /&gt;
</pre></blockquote>
</p>
<p>Wie sich zeigt ist jBPM so flexibel, dass diese Vereinfachung mit etwas Konfiguration und einer Hilfsklasse leicht erreicht werden kann.</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/35-Spring-und-jBPM.html#extended">"Spring und jBPM" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/33-ELResolver-konfigurieren-mit-Spring.html" rel="alternate" title="ELResolver konfigurieren mit Spring" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-08-25T07:37:00Z</published>
        <updated>2007-08-25T07:38:06Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=33</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=33</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/33-guid.html</id>
        <title type="html">ELResolver konfigurieren mit Spring</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>SpringELResolverSupport konfiguriert ELResolver mit Spring</h3>
<p>
Die Überschrift sagt eigentlich schon alles: der ELResolver wird selbst durch Spring erzeugt und konfiguriert.
</p>
<p>Manchmal ist es nützlich oder sogar notwendig, dass ein ELResolver durch Spring konfiguriert wird. Wenn man den Resolver allerdings direkt in die faces-config.xml einträgt, dann geht das nicht.
</p>
<p>
Stattdessen wird ein Helper eingetragen, der auf die eigentlichen ELResolver delegiert...
</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/33-ELResolver-konfigurieren-mit-Spring.html#extended">"ELResolver konfigurieren mit Spring" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/32-Spring-ELResolver-mit-MessageSource-Support.html" rel="alternate" title="Spring ELResolver mit MessageSource-Support" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-08-24T22:08:51Z</published>
        <updated>2007-08-24T22:32:00Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=32</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=32</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/32-guid.html</id>
        <title type="html">Spring ELResolver mit MessageSource-Support</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>Spring ELResolver für Unified Expression Language und JSF 1.2</h3>
<p>
Seit der Version 1.2 von Java Server Faces sind die alten PropertyResolver und VariableResolver deprecated. Stattdessen sollte man einen ELResolver verwenden. Das hat ausserdem den Vorteil, dass ein ELResolver auch ausserhalb von JSF funktioniert (ab JSP 2.1).
</p>
<p>
Der vorgestellte ELResolver exponiert den kompletten WebApplicationContext mit allen SpringBeans und kommt darüber hinaus noch mit Support für Springs MessageSources, so dass ein Ausdruck <code>#{bundle.key}</code> direkt auf die MessageSource zu greifen kann.
</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/32-Spring-ELResolver-mit-MessageSource-Support.html#extended">"Spring ELResolver mit MessageSource-Support" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/31-Security-fuer-JSF-Komponenten-mit-Spring-AOP.html" rel="alternate" title="Security für JSF-Komponenten mit Spring AOP" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-08-18T21:02:00Z</published>
        <updated>2007-10-22T20:59:12Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=31</wfw:comment>
    
        <slash:comments>3</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=31</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/31-guid.html</id>
        <title type="html">Security für JSF-Komponenten mit Spring AOP</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>Spring als Factory für JSF-Components</h3>
<p>
Wie schon im letzten <a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/30-JSF-Components-mit-Spring-und-Velocity-Templates.html">
Beitrag "JSF-Components mit Spring und Velocity-Templates"</a> soll auch bei diesem Beispiel Spring zum Erzeugen von JSF-Componenten benutzt werden.</p>
<p>Noch einmal kurz das Vorgehen: in der faces-config.xml wird mit:
<blockquote style="border: 1px solid gray; font-size: 100%; background-color: rgb(238, 238, 238);"><pre>
<span class="java14">  &lt;factory&gt;
    &lt;application-factory&gt;
      org.springframework.web.jsf.SpringApplicationFactory
    &lt;/application-factory&gt;
  &lt;/factory&gt;</span>
</pre></blockquote><br/>
eine ApplicationFactory eingetragen, die Spring ins Spiel bringt, um JSF-Components zu erzeugen. Im letzten Artikel hatte ich das benutzt, um Komponenten wie SpringBeans zu erzeugen und zu konfigurieren.<br/>
Wenn Spring die Komponenten erzeugt, dann lassen sich alle Spring Features voll zum Einsatz bringen, unter anderem auch AOP:<br/>
Man kann z.B. abhängig von der ROLE eines User eine Komponente anzeigen oder nicht. Hierzu schreibt man einen MethodInterceptor, der die Aufrufe der "encode*"-Calls auf die Komponente überprüft. Die SpringApplication kann aber noch mehr. AOP läßt sich nämlich auch auf die Standard-Komponenten anwenden ...
</p>
 <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/31-Security-fuer-JSF-Komponenten-mit-Spring-AOP.html#extended">"Security für JSF-Komponenten mit Spring AOP" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/30-JSF-Components-mit-Spring-und-Velocity-Templates.html" rel="alternate" title="JSF Components mit Spring und Velocity-Templates" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-08-14T21:49:43Z</published>
        <updated>2007-08-18T21:04:48Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=30</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=30</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/30-guid.html</id>
        <title type="html">JSF Components mit Spring und Velocity-Templates</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>JSF Spring Integration</h3>
<p>
Die Integration von JSF und Spring ist mit Spring 2.0 und den neuen Beanscopes schon recht einfach geworden. Was aber immer noch nicht so ohne weiteres geht, ist das Erzeugen von Componenten mit Spring.
</p>
<p>Angeregt von <a href="http://www.jroller.com/RickHigh/">Rick Hightower's Sleepless Night in Tucson</a> bzw. seinen Veröffentlichungen auf <a href="http://www.thearcmind.com/confluence/display/SpribernateSF/Home">ArcMind</a> habe ich etwas Code zusammengestellt, der Componenten mit Hilfe von Spring instanziiert und zum Rendern einfach eine Template-Engine wie <a href="http://velocity.apache.org/">Velocity</a> oder <a href="http://freemarker.sourceforge.net/">Freemarker</a> benutzt.
</p>
<p>
Mit Spring lassen sich diese Komponenten dann einfach konfigurieren und für sehr einfache Sachen ist man mit dem Schreiben der Templates schon fertig.
</p>

 <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/30-JSF-Components-mit-Spring-und-Velocity-Templates.html#extended">"JSF Components mit Spring und Velocity-Templates" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/29-SecurityContext-fuer-Acegi-mit-Request-Scope.html" rel="alternate" title="SecurityContext für Acegi mit Request-Scope" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-08-07T20:43:00Z</published>
        <updated>2007-08-08T08:01:32Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=29</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=29</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/29-guid.html</id>
        <title type="html">SecurityContext für Acegi mit Request-Scope</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>Acegi Security-Framework für Spring</h3>
<p>
Wenn man mit Spring statt mit EJB arbeitet, ist ein Aspekt, welcher normalerweise komplett vom ApplikationServer abgedeckt wird, die Sicherheit. Hierzu gibt es die Standard-Lösung, die auch in vielen Artikeln und Büchern erwähnt und besprochen ist: <a href="http://www.acegisecurity.org/">Acegi</a>
</p>
<p>
Zusammen mit <a href="http://www.springframework.org/">Spring</a>, lassen sich per AOP Interceptoren beim Zugriff auf Businessmethoden von SpringBeans dazwischen "weben", die die Authentisierung des Aufrufers überwachen. Acegi benutzt hierzu einen SecurityContext, der auf unterschiedlichste Weise entstehen und befüllt werden kann.
</p>
<p>In meinem konkreten Anwendungsfall wurde die Authentisierung einer WebApplikation mittels HTTP-Basic-Authentication realisiert und in der ersten zunächst scheinbar korrekten Konfiguration zeigten sich seltsame Effekte:
<blockquote>
Neben den Zugriffen, die richtig authentisiert waren und demnach ohne weiteres ausgeführt wurden, konnte es passieren, dass manchmal auch ein nicht authentisierter Aufruf durchkam?
</blockquote>
</p>
<p>Wie sich heraus stellte, lebt der SecurityContext in einem ThreadLocal was im ApplikationenServer (hier Tomcat) mit dem jeweiligen WorkerThread assoziiert ist. Nun konnte es passieren, dass die SecurityContext eines vergangenen Requests "überlebt" hat und bei einem erneuten Zugriff wiederbenutzt wurde. So waren Zugriffe die zufällig mit dem "richtigen" WorkerThread ausgeführt wurden, falsch authentisiert.
</p>
<p>Was hier fehlt (und in Acegi ist das nicht vorhanden) ist ein LifeCycle des SecurityContexts der sich am Request orientiert. Was Acegi bietet ist die Kontrolle des LifeCycles über eine Instance von "SecurityContextHolderStrategy" und eine solche "Strategy" für HTTP-Requests will ich hier einmal vorstellen.
</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/29-SecurityContext-fuer-Acegi-mit-Request-Scope.html#extended">"SecurityContext für Acegi mit Request-Scope" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/28-Ableiten-von-Final-Klassen-mit-Gluonj.html" rel="alternate" title="Ableiten von Final-Klassen mit Gluonj" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-08-07T06:19:00Z</published>
        <updated>2007-08-07T10:19:44Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=28</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=28</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/28-guid.html</id>
        <title type="html">Ableiten von Final-Klassen mit Gluonj</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>Ärgernis beim Testen</h3>
<p>Beim Testen mit Unittests verwendet man meist Mock-Objecte, die die "Umgebung" der Klasse, die zu Testen ist "simulieren". Dumm nur, dass diese Umgebung manchmal aus Klassen besteht, die kein Interface implementieren. Wenn dann auch noch einer dieser Klassen "final" ist (oder eine Methode), dann ist man selbst mit so schönen Mock "Generatoren" wie <a href="http://www.easymock.org">EasyMock</a> am Ende.</p>

<h3>EasyMock Classextensions</h3>
<p>Zwar kann EasyMock mit den ClassExtensions auch Mock-Objecte von Klassen erzeugen, aber dazu dürfen diese nicht "final" sein. Das hat damit zu tun, dass unter der Haube mit Hilfe der CGLIB eine Ableitung der betreffenden Klasse erzeugt wird, die als Mock-Object dient. Das aber kann nur funktionieren, wann Ableiten erlaubt ist. Hier kann <a href="http://www.csg.is.titech.ac.jp/projects/gluonj/">GLUONJ</a> Abhilfe schaffen ...</p>

 <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/28-Ableiten-von-Final-Klassen-mit-Gluonj.html#extended">"Ableiten von Final-Klassen mit Gluonj" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/27-Native-Windows-FileChooser-mit-JNative.html" rel="alternate" title="Native Windows-FileChooser mit JNative" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-08-01T21:24:15Z</published>
        <updated>2007-08-07T12:43:51Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=27</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=27</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/27-guid.html</id>
        <title type="html">Native Windows-FileChooser mit JNative</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>Swing-FileChooser</h3>
<p>
Der Swing-FileChooser hat selbst in der Version 6 von Java immer noch nicht das Niveau des nativen FileChoosers erreicht. So steht bespielsweise die wichtige Miniaturansicht für Bilder bei Swing nicht zur Verfügung. Auch das Auswahl "Lasso" bei mehrfach Auswahl fehlt bei der Java-Variante.
</p>
<h3>JNative</h3>
<p>Mit <a href="http://jnative.free.fr/">JNative</a> gibt es eine einfache Möglichkeit native Code in Java einzubinden, ohne dafür gleich JNI oder den C/C++ Compiler bemühen zu müssen. Der native Code in der DLL (oder dem SO-Modul) ist generisch und ein Call an eine Betriebsystemfunktion wie "GetOpenFile" wird sozusagen in Java "zusammengebaut".
</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/27-Native-Windows-FileChooser-mit-JNative.html#extended">"Native Windows-FileChooser mit JNative" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/26-DocBook-Publishing-mit-OpenOffice.html" rel="alternate" title="DocBook Publishing mit OpenOffice" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-07-30T22:15:00Z</published>
        <updated>2007-07-31T14:59:13Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=26</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/3-Misc" label="Misc" term="Misc" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/26-guid.html</id>
        <title type="html">DocBook Publishing mit OpenOffice</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <h3>Einfacher ... </h3>
<p>
Anläßlich einer Anfrage zum meinem <a href="http://www.stefan-rinke.de/articles/publish/">Artikel</a> habe ich das damals doch recht komplizierte Zusammenspiel von ANT, Python und Java einmal refakturiert und in eine einfache Java-Anwendung gegossen.
</p>
<p>
Herausgekommen ist eine kleine Kommandozeilen Applikation, die aus einer OpenOffice-Datei (altes SXW-Format, kein ODT) eine Docbook XML-File erzeugt, alle Bilder extrahiert und die Links anpasst. Weiterhin wird auf Wunsch auch gleich das 1-Seiten-Html und das mehrseitige HTML erzeugt. PDF und weitere lassen sich leicht ergänzen.
</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/26-DocBook-Publishing-mit-OpenOffice.html#extended">"DocBook Publishing mit OpenOffice" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/25-Testen-mit-HttpUnit-und-Spring.html" rel="alternate" title="Testen mit HttpUnit und Spring" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-07-30T10:39:00Z</published>
        <updated>2007-07-30T21:42:33Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=25</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=25</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/25-guid.html</id>
        <title type="html">Testen mit HttpUnit und Spring</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Beim Testen mit HttpUnit und Spring müssen die Servlets und Filter, die über Spring konfiguriert werden mit ihrem Context versorgt werden. Nimmt man hierzu den "normalen" Context-Listener von Spring, hat das den Nachteil, dass bei jedem Start des HttpUnit-ServletContainers der Context neugeladen wird, was unter Umständen viel Zeit in Anspruch nimmt.
</p>
<h3>Context cachen</h3>

<p>Das Zwischenspeichern des Context ist erforderlich und ähnlich wie Spring selbst Basisklassen mit dieser Eigenschaft anbietet, kann auch ein ContextListener geschrieben werden, der den Context speichert und für viele Testruns zu Verfügung stellt.</p> <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/25-Testen-mit-HttpUnit-und-Spring.html#extended">"Testen mit HttpUnit und Spring" vollständig lesen</a>
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/24-Generisches-Spring-Servlet.html" rel="alternate" title="Generisches Spring-Servlet" />
        <author>
            <name>Stefan Rinke</name>
            <email>nospam@example.com</email>
        </author>
    
        <published>2007-07-25T06:34:00Z</published>
        <updated>2007-08-21T22:12:50Z</updated>
        <wfw:comment>http://www.cogito-ergo-blog.de/blog/wfwcomment.php?cid=24</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://www.cogito-ergo-blog.de/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=24</wfw:commentRss>
    
            <category scheme="http://www.cogito-ergo-blog.de/blog/index.php?/categories/2-Java" label="Java" term="Java" />
    
        <id>http://www.cogito-ergo-blog.de/blog/index.php?/archives/24-guid.html</id>
        <title type="html">Generisches Spring-Servlet</title>
        <content type="xhtml" xml:base="http://www.cogito-ergo-blog.de/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>Manchmal braucht man neben den MVC Mechanismen von Spring-Web auch ein ganz normales Servlet, welches nicht einem Handler entspricht, der ModelAndView zurückgibt. Leider ist so ein Servlet dann aber selbst keine Spring-Bean, sondern muss sich selbst des Spring-Contexts bedienen, um an die Spring-Beans heranzukommen und Dependencies zu setzen.</p><p>Ein generisches Spring-Servlet, welches auf eine Servlet-Spring-Bean delegiert, schafft Abhilfe ...</p>
 <br /><a href="http://www.cogito-ergo-blog.de/blog/index.php?/archives/24-Generisches-Spring-Servlet.html#extended">"Generisches Spring-Servlet" vollständig lesen</a>
            </div>
        </content>
        
    </entry>

</feed>