<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		
		<title>levigo blog</title>
		<link>http://www.levigo.de/</link>
		<description>Blog der levigo Unternehmensgruppe</description>
		<language>de</language>
		<image>
			<title>levigo blog</title>
			<url>http://www.levigo.de/fileadmin/templates/img/rss_icon.gif</url>
			<link>http://www.levigo.de/</link>
			<width>14</width>
			<height>14</height>
			<description>Blog der levigo Unternehmensgruppe</description>
		</image>
		<generator>TYPO3 - get.content.right</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		
		
		
		<lastBuildDate>Thu, 04 Mar 2010 13:29:00 +0100</lastBuildDate>
		
		
		<item>
			<title>jadice server Release 4.2.1.5</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-server-release-4215/</link>
			<description>Aktuelle Version verfügbar!</description>
			<content:encoded><![CDATA[Die Version 4.2.1.5 des jadice server, die seit heute verfügbar ist, enthält folgende Highlights:
<ul><li>n-zu-n-Konvertierung mit Ghostscript</li><li>Verbesserte Performance bei der Konvertierung von E-Mails ohne Attachments oder mit nur einer Textseite</li><li>In SOAP-Antworten werden Dateiname und MIME-Type der anhängenden Datenströme explizit gesetzt</li><li>Verbesserter JMX-Support für MS Office- / OpenOffice- / Apache FOP-Pools</li><li>Debug-Modus für MS Office</li></ul>
Genauere Ausführungen und weitere Einzelheiten zur aktuellen Version finden sich in den <b><a href="http://support.levigo.de/products/jadice/server/4.2/documentation/releasenotes.html" title="Release notes jadice server" target="_blank" rel="nofollow" class="external-link-new-window" >Release Notes</a></b> der online-Doku des jadice server.]]></content:encoded>
			
			
			<pubDate>Mon, 01 Mar 2010 12:00:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>jadice document platform Release 4.2.0.9</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-document-platform-release-4209/</link>
			<description>Das aktuelle Release der jadice document platform bietet neben verschiedenen Korrekturen und...</description>
			<content:encoded><![CDATA[Das aktuelle Release der jadice document platform bietet neben verschiedenen Korrekturen und Bugfixes folgende Änderungen: 
Die Indizierungsengine der <b>Textsuche</b> wurde deutlich verbessert. Zusätzlich ist das Verhalten der Such-Funktion verbessert worden, indem das Command nur aktiv ist, wenn das Dokument echten textuellen Inhalt enthält. Ist ein Text nur als Bild vorhanden (z.B. Fax), bleibt das Such-Command inaktiv.
Mögliche Abweichungen zwischen der Position des <b>Navigators</b> und des ausgewählten Bereichs sind behoben worden. Der Rotationsmodus des Navigators wird nun über ein gut erkennbares Icon dargestellt statt wie vorher über eine textuelle Anzeige.
Weitere <b><a href="http://support.levigo.de/products/jadice/documentplatform/documentation/releasenotes.html" target="_blank" rel="nofollow" class="external-link-new-window" >Release Notes</a></b> finden Sie in unserer <b><a href="http://support.levigo.de/products/jadice/documentplatform/" target="_blank" rel="nofollow" class="external-link-new-window" >online-Dokumentation</a></b>.]]></content:encoded>
			
			
			<pubDate>Wed, 09 Dec 2009 10:36:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>jadice document platform Release 4.2.0.8</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-document-platform-release-4208/</link>
			<description>Die aktuelle Version der jadice document platform enthält neben erweiterter Toleranz für...</description>
			<content:encoded><![CDATA[Die aktuelle Version der jadice document platform enthält neben erweiterter Toleranz für beschädigte embedded fonts im PDF-Umfeld noch folgende Neuheiten:
<ul><li>Die jadice Cache Management Initialisierung ist jetzt auch OSGi-fähig und ermöglicht somit einen verbesserten Einsatz für RCP-Anwendungen.</li><li>Die LoggingConfiguration stellt zwei zusätzliche Methoden zur Verfügung, um QualifiedLogListener ThreadLocal anzumelden.</li></ul>
Mehr Informationen dazu finden Sie in den <b><a href="http://support.levigo.de/products/jadice/documentplatform/documentation/releasenotes.html" target="_blank" class="external-link-new-window" >Release Notes</a></b> unserer online-Dokumentation.]]></content:encoded>
			
			
			<pubDate>Thu, 05 Nov 2009 11:14:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>jadice online-Dokumentation</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-online-dokumentation/</link>
			<description>jadice 4.2.0.7 jetzt verfügbar!</description>
			<content:encoded><![CDATA[Die vollständige Dokumentation der jadice document platform steht ab sofort online zur Verfügung. Darin enthalten sind verschiedene Entwicklerdokumentationen, technische Hinweise und vor allem Informationen rund um die Software. Dazu gehören eine Übersicht über die aktuelle Auslieferung, Konfigurationsänderungen und&nbsp;im Besonderen die <b><a href="http://support.levigo.de/products/jadice/documentplatform/documentation/releasenotes.html" target="_blank" rel="nofollow" class="external-link-new-window" >Release Notes</a></b> mit Änderungen  der jeweils neuesten jadice-Version.<br />Das aktuelle<b> Release der jadice document platform (4.2.0.7), </b>das<b> </b>jetzt erschienen ist,<b>  </b>enthält im Wesentlichen Bugfixes und kleinere Korrekturen. 
<b><a href="http://support.levigo.de/products/jadice/documentplatform/" target="_blank" rel="nofollow" class="external-link-new-window" >Zur Documentation Library &gt;</a></b>]]></content:encoded>
			
			
			<pubDate>Wed, 14 Oct 2009 13:37:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>jadice Sommer-Release </title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-sommer-release/</link>
			<description>In den Sommermonaten August und September ist die jadice document platform in den Versionen 4.2.0.5...</description>
			<content:encoded><![CDATA[In den Sommermonaten August und September ist die <b>jadice document platform</b> in den Versionen <b>4.2.0.5</b> und <b>4.2.0.6</b> erschienen. Für Urlauber und Weltumsegler möchten wir hier einen Überblick geben über die Neuerungen bei den
<b>allgemeinen Erweiterungen und Korrekturen</b>:
<ul><li><p>Verbesserungen 	bei der CCITT Kompression und Dekompression</p> 	</li><li><p>Verbesserter 	Umgang mit JPEG-Datenströmen, die mehr als ein Bild enthalten</p> 	</li><li><p>API-Zugang 	zu den Font Render Context Settings “AntiAliased” und 	“usesFractionMetrics” für Textdokumente</p> 	</li><li><p>Unterstützung 	für den ASCII-Code FORM FEED (0x0Ch) in Textdateien</p> 	</li><li><p>Erweiterung 	des Modification-Mappings für AFP/MO:DCA Seitengrößen</p> 	</li><li><p>Die 	Logik für die Verwaltung von temporären Dateien innerhalb der 	jadice document platform wurde verbessert, um auch ohne die 	Möglichkeit zum Setzen von ShutdownHooks arbeiten zu können.</p> </li></ul>
<br /> 
und im<b> PDF-Umfeld</b>:
<ul><li><p>Verbesserte 	Interpretation der CIDToGID-Map bei Type0 Schriften mit TrueType 	Zeichen</p> 	</li><li><p>Korrigierte 	Verarbeitung von eingebetteten Type0 Encoding CMaps  	</p> 	</li><li><p>Korrigierte 	Interpretation von komplexen Zeichen in True Type Schriften</p> 	</li><li><p>Unterstützung 	von Farbkomponenten-Masken in RGB-Bildern (bestimmte 	Farbbereiche eines Bildes werden als transparent interpretiert)</p> 	</li><li><p>Grundlegende 	Unterstützung für die Anzeige von Widget Annotationen (z.B. für 	Formularfelder, nicht veränderbar)</p> 	</li><li><p>Der 	Farbraum „Separation“ kann nun auch mit Type4 Postscript-Funktionen arbeiten</p> 	</li><li><p>Unterstützung 	nicht komprimierter CMYK-Bilder</p> 	</li><li><p>Verbesserung 	des Font-Mappings: jadice versucht nun Systemschriften anzuwenden, 	sofern diese nicht ausdrücklich ausgeschaltet sind.</p> 	 </li></ul>]]></content:encoded>
			
			
			<pubDate>Thu, 01 Oct 2009 13:05:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>jadice document platform und jadice i+: Release 4.2.0.4</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-document-platform-und-jadice-i-release-4204/</link>
			<description>Die jadice document platform ist ab sofort in der Version 4.2.0.4 verfügbar.  Da jadice...</description>
			<content:encoded><![CDATA[Die jadice document platform ist&nbsp;ab sofort in der Version 4.2.0.4 verfügbar.&nbsp; Da jadice i+ von den Neuerungen der jadice document platform profitiert, erscheint es ebenfalls in der neuen Version 4.2.0.4. Eine wesentliche Verbesserung bietet jadice jetzt in der Anzeige von FileNetImages. <br />Das aktuelle Release hat folgende konkrete Neuerungen:
<b>PDF</b><br />Die Logik für die Substitution von Base 14 Fonts wurde deutlich verbessert. Damit werden zur Anzeige Schriften verwendet, die der Originalschrift sehr ähnlich sind, sofern die Originalschrift im Dokument nicht zur Verfügung steht.
<b>FileNet Images</b><br />Die Interpretation und Darstellung von FileNet Images wurde deutlich verbessert. Eine invertierte oder verschwommene Anzeige bestimmter Dokumente tritt mit der neuen jadice Version nicht mehr auf.
<b>Drucken</b><br />Wesentlich erweiterte Konfigurationsmöglichkeiten für optimierten Druckoutput.]]></content:encoded>
			
			
			<pubDate>Mon, 13 Jul 2009 09:59:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>jadice server in Generation 4.2 verfügbar</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-server-in-generation-42-verfuegbar/</link>
			<description>Nach der jadice document platform erscheint jetzt auch der jadice server in der Generation 4.2. Da...</description>
			<content:encoded><![CDATA[Nach der jadice document platform erscheint jetzt auch der jadice server in der Generation 4.2. Da der jadice server auf die Funktionalität der zugrunde liegenden jadice document platform zugreift, bieten sich ihm mit der Einbindung der jadice document platform 4.2.  auch die aktuellen Möglichkeiten dieser Produktlinie. Ein weiteres Novum bietet die Generation 4.2. mit der Einbindung von Ghostscript. Die neuen Features des jadice server werden modular angeboten.
&nbsp;
<b>Die wichtigsten Neuerungen:</b>
<ul><li>Einbindung der aktuellen jadice document platform 4.2. <ul><li>Verbessertes Rendering von PDFs, TIFFs und weiteren Imageformaten für eine gesteigerte Anzeigequalität</li><li>Qualifiziertes Logging macht Ereignisse oder Fehler zugänglich und ermöglicht so eine gezielte Reaktion auf diese.</li></ul></li><li>Unterstützung von MS Office 2007 und dessen nativem PDF/A-Export (Word, Excel, Powerpoint und Visio) sowie eine effizientere Architektur zu dessen Ansteuerung.</li><li>Erweiterung des jadice server um eine SOAP-Schnittstelle. Damit kann jadice server auch von Clients außerhalb der Java-Welt angesprochen werden. Dieses Feature wird weiter ausgebaut und entwickelt.</li></ul>
<br /><b>Weitere Änderungen:</b>
<ul><li>Einbindung von Apache ActiveMQ 5.2. Verbindungsabbrüche, die gelegentlich beim Betrieb vom jadice server unter MS Windows auftraten, kommen dadurch nicht mehr vor.</li><li>Verbesserung der E-Mailkonvertierung: <ul><li>Multipart/related-Blöcke, die nicht referenziert sind, werden als normale Attachments weitergereicht (entspricht dem Standardverhalten von Desktop-E-Mailclients)</li><li>Besseres Rendering von HTML, das nicht auf A4-Seitenbreite gerendert werden kann.</li></ul></li><li>Einbindung von ghostscript:&nbsp; Der jadice server verfügt nun über einen dezidierten Knoten, mit dem alle Optionen, die ghostscript bietet, auf einfache Weise angesprochen werden können. Alle notwendigen Schritte - wie die Zwischenspeicherung der Daten, der Aufruf von ghostscript und das Löschen von temporären Dateien - werden vom jadice server automatisch durchgeführt.</li></ul>
&nbsp;
Um jadice server 4.2. zu erhalten, wenden Sie sich einfach an <b><a href="mailto:solutions@levigo.de" class="mail" >solutions@levigo.de</a></b> .]]></content:encoded>
			
			
			<pubDate>Thu, 09 Jul 2009 09:17:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Was ist BIRT?</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/was-ist-birt/</link>
			<description>Business Intelligence and Reporting Tools</description>
			<content:encoded><![CDATA[<p lang="de-DE"> <b>BIRT</b> (<b>B</b>usiness <b>I</b>ntelligence and <b>R</b>eporting <b>T</b>ools) ist ein OpenSource Projekt, das von der Firma Actuate Corporation vorgeschlagen wurde und über die Eclipse Foundation vorangetrieben wird. Es ist mittlerweile ein Top-Level-Softwareprojekt innerhalb der Eclipse Foundation.</p>
<p lang="de-DE"> BIRT besteht aus zwei Hauptkomponenten: Einem graphischen Berichte-Editor innerhalb der Eclipse IDE, um BIRT-Berichte zu designen, und einer Laufzeitkomponente für die Erzeugung von Berichten, die in jeder Java-Umgebung eingesetzt werden kann.</p>
<p lang="de-DE"> BIRT wird dazu eingesetzt, einen großen Bereich des Berichtwesens in typischen Applikationen in Unternehmen abzudecken.</p>
<p lang="de-DE" class="align-justify"><img src="fileadmin/pics/de/news/BIRT_01.png" width="380" height="137" alt="" /></p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE"> Mit BIRT kann der Report im Eclipse Report Designer generiert werden. Es ist aber auch möglich, mithilfe des Web Based Report Designer einen Report zu erstellen. Die dritte Möglichkeit ist wohl die vielseitigste und interessanteste: der Custom Report Designer. Dazu werden dem Entwickler die einzelnen Klassen der Engine, beziehungsweise diese als Ganzes (API), zur Verfügung gestellt und somit kann er einen eigenen Report Designer generieren.</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE"> <b>Einzelne Komponenten von BIRT</b></p>
<p lang="de-DE"> <i><b>Report Design Engine</b></i><br />Die Report Design Engine generiert aus den Eingabedaten eine XML-Datei, welche das Design, die Datenherkunft sowie die verschiedenen Parameter des Reports beschreibt.  </p>
<p lang="de-DE"> <i><b>Charting Engine</b></i><br />Die Charting Engine wird von der Report Engine dann aufgerufen, wenn ein  Diagramm (engl. Chart) erstellt werden muss. Daten werden von der aufrufenden Report Engine bereitgestellt.</p>
<p lang="de-DE"> <i><b>Report Engine</b></i><br />Die Report Engine ist in zwei Bereiche mit unterschiedlichen Services untergliedert: Der erste Bereich, die sogenannten Generation Services, kümmern sich um die Beschaffung der Daten. Er gibt eine Art Rohdokument an die Presentation Services weiter, welche die Aufbereitung in ein Ausgabeformat (zum Beispiel PDF o.ä.) übernehmen.</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE"> <b>Typische BIRT-Anwendung</b><br />In einer typischen Anwendung wird BIRT zur Generierung von Tabellen-basierten Reports, welche in einem leicht austauschbaren Format (PDF) erstellt werden, verwendet. Dazu wird BIRT aus einer JAVA-Anwendung aufgerufen und es werden POJOs bereitgestellt, um die Daten in der gewünschten Form präsentieren zu können. Als Datenquelle ist POJOs (Plain Old Java Object) gewählt worden, da diese eine größtmögliche Flexibilität ermöglichen. Hier gibt es einige Tricks und Kniffe zu beachten.</p>
<p lang="de-DE"> Für den Aufruf der verschiedenen Komponenten von BIRT, welche zu konfigurieren sind, findet man sehr viele Beispiele im Internet. Hier nur ein paar Auszüge:</p>
<p class="code"><div class="codeContent indent"><pre class="code-java">config = new EngineConfig();<br />config.setBIRTHome(file.getAbsolutePath());<br />  &#8942;<br />Platform.<i>startup</i>(config);<i><br />logger</i>.debug(„Platform created, starting factory.“;<br />IreportEngineFactory factory = (IReportEngineFactory) Platform<br />.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);<i><br />engine</i> = factory.createReportEngine(config);<br />  &#8942;<i><br />design</i> = <i>engine</i>.openReportDesign(name_rtpdesign_File);<br />  &#8942;<br />IRunAndRenderTask task = <i>engine</i>.createRunAndRenderTask(<i>design</i>);<br />  &#8942;<br />PDFRenderOption options = new PDFRenderOption();<br />  &#8942;<br />task.setRenderOption(options);<br />  &#8942;<br />try {<br />  task.run();<br />} catch (EngineException e) {<br />  throw (new, e);<br />}<i><br />engine</i>.destroy();<br />task.close();</pre></div></p>
<p lang="de-DE">Dieser Code (und noch ein paar andere Zeilen) wird verwendet, um einen BIRT zu konfigurieren und einen Report zu produzieren.  </p>
<p lang="de-DE"> Einer der wichtigsten Tricks ist, dass beim Beenden des (eigenen) Programms unmittelbar ein Plattform.shutdown() aufgerufen wird. Nach diesem Aufruf kann jedoch kein Bericht mehr erstellt werden. Deshalb soll man sie auch z.B. beim Schließen des Fensters aufrufen.</p>
<p lang="de-DE"> Im Folgenden werden die Klassen <b>Job4BirtFactory</b>, <b>Job4Birt</b> und <b>History4Birt</b> verwendet. Die Factory Klasse ist hierbei die Klasse, welche über eine Methode (getJob()) die beiden weiteren Klassen mit Daten füllt. Die beiden anderen Klassen fungieren hier als „Datenträger“ und bestehen größtenteils aus Gettern, Settern und Variablen.</p>
<p lang="de-DE"> Die Schnittstelle in BIRT wird über eine „scripted Datasource“ erstellt.</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE"><img src="fileadmin/pics/de/news/BIRT_02.png" width="380" height="102" alt="" /></p>
<p lang="de-DE">Hier ist das Script zu sehen, welches die Job4BirtFactory (aus dem Report) aufruft und über diesen Weg den Job (für welchen das Script die Job ID bereithält) erhält.</p>
<p lang="de-DE"> Nun können von dieser DataSource DataSets erstellt werden, welche wie Tabellen funktionieren. Achtung: 2 Scripts müssen erstellt werden!<br />Eines zum Öffnen der Datenquelle (open) - </p>
<p lang="de-DE"><img src="fileadmin/pics/de/news/BIRT_03.png" width="380" height="50" alt="" /></p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE"> das andere Script zur detaillierten Auswertung der Daten eines POJO (hier exemplarisch an der History dargestellt). Das Fetch-Script kann ähnlich einer While-Schleife verwendet werden.</p>
<p lang="de-DE"><img src="fileadmin/pics/de/news/BIRT_04.png" width="380" height="126" alt="" /></p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE">&nbsp;</p>
<p lang="de-DE">&nbsp;</p>]]></content:encoded>
			
			
			<pubDate>Wed, 08 Jul 2009 10:12:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Management und Monitoring der jadice document platform mit JMX</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/management-und-monitoring-der-jadice-document-platform-mit-jmx/</link>
			<description>Von François Fernandès</description>
			<content:encoded><![CDATA[Mit JAVA 5 wurde eine Reihe sehr nützlicher Funktionalitäten in die Runtime aufgenommen. Dies sind beispielsweise das <b>java.util.concurrent</b>-Framework, Annotations, Generics und natürlich JMX. Interessant ist nun das JMX-Framework, welches ermöglicht, Informationen über eine Applikation mittels eines standardisierten Interface (<b><a href="http://jcp.org/en/jsr/detail?id=3" title="Opens external link in new window" target="_blank" rel="nofollow" class="external-link-new-window" >JSR-3</a></b> und <b><a href="http://jcp.org/en/jsr/detail?id=160" title="Opens external link in new window" target="_blank" rel="nofollow" class="external-link-new-window" >JSR-160</a></b>) auch außerhalb der Anwendung zur Verfügung zu stellen. Es existieren eine Reihe von JMX-Clients wie beispielsweise die in den JDK integrierte <b><a href="http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html" title="Opens external link in new window" target="_blank" rel="nofollow" class="external-link-new-window" >JConsole</a></b>. Alternativen gibt es ebenfalls zur Genüge. Beispielsweise <b><a href="https://visualvm.dev.java.net/" target="_blank" rel="nofollow" >VisualVM</a></b>, für welches ein JMX MBean Plugin existiert, oder <b><a href="http://mc4j.org/" target="_blank" rel="nofollow" >MC4J</a></b>.
Wir arbeiten daher an einer Möglichkeit, um den aktuellen Zustand der jadice document platform und deren Module und Komponenten mittels JMX zu propagieren. Derzeit sind wir in der Proof-Of-Concept Phase und möchten die bisherige Idee vorstellen.<br /> Um das Exponieren von Informationen über die jadice document platform einfach und flexibel zu gestalten, arbeiten wir an einer Pseudo-DSL (=Domain Specific Language), die möglichst aussagekräftig beschreiben soll, welche Daten exponiert werden und zusätzlich die JMX API deutlich vereinfachen:
<p class="code"><div class="codeContent"><pre class="code-java">Viewer v = <span class="code-comment">//...<br /></span>MBeanServer mbs = ManagementFactory.getPlatformMBeanServer()<br />ManagementConfiguration.on(mbs)<br />	.addModule(SupportUtilsManagementModule.get())<br />	.addModule(ViewerManagementModule.manage(v,<span class="code-quote">&quot;MyViewer&quot;</span>))<br />	.start();</pre></div></p>
Die Management Logik wird hierbei in Module gruppiert. Jedes dieser Module kann ein oder mehrere <b>MBeans</b> einem <b>MBeanServer</b> zuweisen. Das <b>ViewerManagementModule</b> beispielsweise erzeugt ein MBean mit lesendem und teilweise schreibendem Zugriff auf einige Properties des Viewer. So ist es beispielsweise möglich, den aktuellen Zoom-Faktor über eine JMX Console zu ändern.<br /> Wie bereits erwähnt, befindet sich diese Management-Erweiterung in einem Proof-Of-Concept Stadium. Für Ideen, Anforderungen oder auch einfach nur Lob sind wir jederzeit offen.
&nbsp;
<img src="fileadmin/pics/de/news/jadice_screenshot.jpg" width="380" height="281" alt="" />]]></content:encoded>
			
			
			<pubDate>Mon, 18 May 2009 11:44:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>jadice document platform Release 4.2.0.2</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-document-platform-release-4202/</link>
			<description>Die jadice document platform ist ab sofort in der Version 4.2.0.2 verfügbar. Das aktuelle Release...</description>
			<content:encoded><![CDATA[Die jadice document platform ist ab sofort in der Version 4.2.0.2 verfügbar. Das aktuelle Release hat folgende Neuerungen:
<b>PDF</b>
<ul><li>Vereinzelt wurden bestimmte Bilevel Images innerhalb von PDF-Dokumenten invertiert dargestellt. Dies ist mit der aktuellen Version behoben worden.</li><li>Rotationsinformationen innerhalb von PDF-Dokumenten werden jetzt unterstützt.</li></ul>
<b>DocTree Module</b>
<ul><li>Erweiterung der StreamLoader Schnittstelle durch com.levigo.jadice.loader.ExtendedDocumentTreeStreamLoader&nbsp;Interface. Hiermit wird nun auch die Angabe eines Dokumententitels und Resource Loader Unterstützung ermöglicht.</li><li>Die Zustandsinformation aller AddOns von ViewerFrameHandlerFrames wurden in ihrem Speicherverhalten optimiert.</li></ul>
<b>Lupe</b>
<ul><li>Interpretation des Lupentext-Patterns robuster gestaltet.</li></ul>]]></content:encoded>
			
			
			<pubDate>Wed, 06 May 2009 11:40:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Textdokumente mit einem eigenen Encoding laden</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/textdokumente-mit-einem-eigenen-encoding-laden/</link>
			<description>In einer idealen Welt - nun gut zumindest IT-Welt - wäre jedes Dokument - egal welcher Art - in nur...</description>
			<content:encoded><![CDATA[In einer idealen Welt - nun gut zumindest IT-Welt - wäre jedes Dokument - egal welcher Art - in nur einer einzigen Art und Weise codiert. Leider sieht die Realität etwas anders aus. Um die vielen Sprachen und vor allem vielen Zeichensätze abzubilden, wurden über die Jahre viele einzelne (oft auf ASCII aufbauende) Encodings entwickelt. Man benötigt daher für die Anzeige von Textdokumenten, neben dem Dokument selbst, auch die Information darüber, wie dieses codiert wurde.<br /> Standardmäßig wird beim Ladevorgang von Textdokumenten in der jadice document platform immer als Standard <b>ISO-8859-1</b> gesetzt. Um Dokumente mit einem speziellen Encoding zu laden, kann eine Instanz der Klasse <b>com.levigo.jadice.formats.text.TextFormatInfo</b> entsprechend konfiguriert werden. Hierzu folgendes Beispiel: 
<p class="code"><div class="codeContent"><pre class="code-java">TextFormatInfo tfi = <span class="code-keyword">new</span> TextFormatInfo();<br />tfi.setEncoding(<span class="code-quote">&quot;UTF-8&quot;</span>);	<br />Document doc = loader.loadDocument(is, tfi,0);</pre></div></p>
Um das Beispiel möglichst einfach zu halten, wurde auf die Behandlung von möglichen Fehlern verzichtet. <br /> In diesem Beispiel wird eine Instanz der Klasse <b>TextFormatInfo</b> erzeugt und das Encoding auf <b>UTF-8</b> gesetzt. Möglich sind viele weitere Encodings, eingeschränkt lediglich durch die Möglichkeiten des Java <b>java.nio.charset.Charset</b>.
Ist der Name eines bestimmten Encodings nicht bekannt oder unklar, ob dieses der Java VM zur Verfügung steht, kann über folgendes Beispiel eine Liste aller möglichen Charset Namen und deren Aliase erzeugt werden:
<p class="code"><div class="codeContent"><pre class="code-java">SortedMap&lt;<span class="code-object">String</span>, Charset&gt; m = Charset.availableCharsets();<br /><span class="code-keyword">for</span> (Entry&lt;<span class="code-object">String</span>, Charset&gt; e : m.entrySet()) {<br />    Charset charset = e.getValue();<br />    <span class="code-object">System</span>.err.println(charset.name());<br />    Set&lt;<span class="code-object">String</span>&gt; aliases = charset.aliases();<br />    <span class="code-keyword">for</span> (<span class="code-object">String</span> alias : aliases) {<br />        <span class="code-object">System</span>.err.println(<span class="code-quote">&quot;\t&quot;</span>+alias);<br />    }<br />}</pre></div></p>
Neben dem Setzen eines Encodings für das Laden von Textdokumenten, bietet die Klasse <b>TextFormatInfo</b> auch eine Reihe weiterer Konfigurationsmöglichkeiten wie beispielsweise das Setzen einer Schrift, mit deren Hilfe die Texte angezeigt werden sollen. Weitere Details und Tipps hierzu werden in einen zukünftigen Artikel einfließen.]]></content:encoded>
			
			
			<pubDate>Mon, 04 May 2009 12:36:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Wie baue ich einen eigenen Knoten für jadice server?</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/wie-baue-ich-einen-eigenen-knoten-fuer-jadice-server/</link>
			<description>In diesem Artikel soll anhand eines einfachen Beispiels gezeigt werden, wie der jadice server um...</description>
			<content:encoded><![CDATA[In diesem Artikel soll anhand eines einfachen Beispiels gezeigt werden, wie der jadice server um eigene Nodes bzw. Worker erweitert werden kann, um damit neue Verarbeitungsschritte realisieren zu können.
&nbsp;
<b>Node-Klasse</b><br />Die neu zu erstellende Nodeklasse muss von der abstrakten Superklasse com.levigo.jadice.server.Node erben. Dabei ist zunächst nur die abstrakte Methode <b>getNodeClassName()</b> zu implementieren. Als Rückgabewert hat diese den voll qualifizierten Klassennamen der korrespondierenden Workerklasse zu liefern: 
<p class="code"><div class="codeContent"><div><pre class="code-java"><span class="code-keyword">package</span> com.myCompany.jadice.client;<br /><span class="code-keyword">import</span> com.levigo.jadice.server.Node;<br /><br /><span class="code-keyword">public</span> class DemoNode <span class="code-keyword">extends</span> Node {<br />  <span class="code-keyword">public</span> <span class="code-object">String</span> getNodeClassName() {<br />    <span class="code-comment">// Klassenname der Workerklasse aus Bsp unten<br /></span>    <span class="code-keyword">return</span> <span class="code-quote">&quot;com.myCompany.jadice.worker.DemoWorker&quot;</span>;<br />  }<br />}</pre></div></div></p>
Soll es möglich sein, dass dem Worker zur Laufzeit Parameter übermittelt werden, so kann dies durch weitere Methoden in der Node-Implementierung erfolgen. Dabei ist zu beachten, dass alle Objekt- und statischen Attribute das Interface Serializable implementieren müssen, da diese über JMS serialisiert und transportiert werden.
<p class="code"><div class="codeContent"><pre class="code-java"><span class="code-keyword">public</span> <span class="code-object">String</span> getMyParameter() {<br />    <span class="code-comment">// Sollte z.B. über Setter-Methode gesetzt werden<br /></span>    <span class="code-keyword">return</span> <span class="code-quote">&quot;a Parameter&quot;</span>;<br />  }</pre></div></p>
Der selbst implementierte Node muss sowohl client- als auch serverseitig im Klassenpfad eingebunden werden und kann später in eigene Workflows eingebettet werden.
&nbsp;
<b>Worker-Klasse</b><br />Die Workerklasse, in der die Konvertierung durchgeführt wird, erbt von der abstrakten, generischen Superklasse com.levigo.jadice.server.core.NodeWorker&lt;N&gt;, wobei der Typ-Parameter &lt;N&gt; für die zugehörige Node-Klasse steht.<br /> Hier ist die abstrakte Methode <b>work()</b> zu implementieren, in der die serverseitige Konvertierung durchführt wird.
<p class="code"><div class="codeContent"><pre class="code-java"><span class="code-keyword">package</span> com.myCompany.jadice.server;<br /><br /><span class="code-comment">// Hier nur die wichtigen Imports<br /></span><span class="code-keyword">import</span> com.levigo.jadice.server.core.NodeWorker;<br /><span class="code-keyword">import</span> com.myCompany.jadice.client.DemoNode;<br /><br /><span class="code-keyword">public</span> class DemoWorker <span class="code-keyword">extends</span> NodeWorker&lt;DemoNode&gt; {<br /><br />  <span class="code-keyword">protected</span> void work() <span class="code-keyword">throws</span> Throwable {<br />    <span class="code-comment">// Im Bsp oben definierter Parameter<br /></span>    <span class="code-object">String</span> myParam = getNode().getMyParameter();<br /><br />    <span class="code-comment">// Abholen der Eingabedaten<br /></span>    <span class="code-keyword">for</span> (Stream stream : getInputBundle()) {<br />      InputStream unprocessedIS = stream.getInputStream();<br />      <span class="code-comment">// Metadaten des empfangenen Datenstrom<br /></span>      StreamDescriptor unprocessedSD = stream.getDescriptor();<br /><br />      <span class="code-comment">// Methode, die den Datenstrom verarbeitet<br /></span>      <span class="code-comment">// (nicht im Listing gezeigt)<br /></span>      InputStream processedIS =  process(unprocessedIS, myParam);<br /><br />      <span class="code-comment">// Metadaten des verarbeiten Datenstroms<br /></span>      <span class="code-comment">// unprocessedSD wird als „Parent&quot; gesetzt<br /></span>      StreamDescriptor processedSD = <span class="code-keyword">new</span> StreamDescriptor(unprocessedSD);<br />      processedSD.setDescription(<span class="code-quote">&quot;&lt;Beschreibung&gt;&quot;</span>);<br />      processedSD.setMimeType(<span class="code-quote">&quot;&lt;MIME Type&gt;&quot;</span>);<br />      processedSD.setFileName(<span class="code-quote">&quot;&lt;Dateiname&gt;&quot;</span>);<br /><br />      <span class="code-comment">// Verknüpfen von Ergebnis und Metadaten<br /></span>      Stream result = <span class="code-keyword">new</span> BundledStream(processedIS, processedSD);<br />      <span class="code-comment">// Weitergabe des Ergebnisses<br /></span>      getOutputBundle().addStream(result);<br />    }<br />}</pre></div></p>
Der auf diese Weise implementierte Worker muss nur im Klassenpfad des jadice servers eingebunden werden und wird bei Verwendung des zugehörigen Nodes aus dem vorherigen Abschnitt automatisch aufgerufen.]]></content:encoded>
			
			
			<pubDate>Thu, 26 Mar 2009 12:06:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Das jadice Signatur-Modul</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/das-jadice-signatur-modul/</link>
			<description>Die Integration von PenPads wird in der letzten Zeit mehr und mehr zum Thema für Firmen mit großem...</description>
			<content:encoded><![CDATA[Die Integration von PenPads wird in der letzten Zeit mehr und mehr zum Thema für Firmen mit großem Dokumentaufkommen. Besonders bei Dokumenten, die von Kunden oder Mitarbeitern gegengezeichnet werden müssen, ist bei analogen Unterschriften das notwendige Ausdrucken und Wiedereinscannen der Dokumente ein mühsamer und zeitaufwändiger Arbeitsschritt. Mit einer PenPad-Lösung fällt dieser zusätzliche Arbeitsschritt weg.<br /><br />Das jadice Signatur-Modul bietet hierfür Funktionen zum Erfassen und Darstellen von Unterschriften, zum Entfernen temporär erfasster Unterschriftsdaten sowie zur Versiegelung von Dokumenten. Über eine Schnittstelle kann zudem ein externes Unterschriftsprüfsystem zum Abgleich der aufgebrachten Unterschrift angebunden werden.<br /><br />Konkret läuft ein Signaturvorgang wie folgt ab:<br />Das zu unterzeichnende Dokument wird im jadice viewer geladen und über die Schnittstelle per PenPad von Kunden unterzeichnet. Die zu unterschreibende Stelle wird dafür mit der Maus markiert. Hieraus entstehen zwei Datenströme, von denen der eine Signaturdaten, wie Unterschriftsansicht, Datum, Uhrzeit und Treiberversion, der andere biometrische Daten, wie Schriftzug, Aufdruck und Winkel, enthält. Nach anschließender Sichtprüfung durch Mitarbeiter und Kunde wird das Dokument versiegelt und somit untrennbar mit den Unterschriftsdaten verbunden. Das Dokument ist von nun an rechtsgültig und kann archiviert werden. Der Kunde erhält ein ausgedrucktes Exemplar als Beleg ausgehändigt. <br /><br />Siehe auch Technische Informationen<br /><b><a href="fileadmin/./download/de/dokumentenmanagement/technischeInfos/P003_jadice_signatur_PenPad_01.pdf" title="Initiates file download" target="_self" class="download" >Unterschrift per PenPad</a></b><br /><b><a href="fileadmin/./download/de/dokumentenmanagement/technischeInfos/K003_jadice_PenPad_Fiducia_01.pdf" title="Initiates file download" target="_self" class="download" >Unterschriftenerfassung</a></b>]]></content:encoded>
			
			
			<pubDate>Thu, 12 Feb 2009 12:02:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>eMail-Archivierung: Konvertieren ohne Informationsverlust</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/email-archivierung-konvertieren-ohne-informationsverlust/</link>
			<description>Die Konvertierung komplexer Dokumente läuft oftmals in mehreren Stufen ab. Um auch nach der...</description>
			<content:encoded><![CDATA[Die Konvertierung komplexer Dokumente läuft oftmals in mehreren Stufen ab. Um auch nach der Umwandlung einen Überblick über das Ausgangsdokument zu haben, muss die Konvertierungssoftware mehrere Anforderungen erfüllen. Eine eingehende <b>Voranalyse</b> des Dokuments gibt der Software Aufschluss über die notwendigen Schritte. Zudem muss zeitgleich die <b>ursprüngliche Dokumentstruktur</b> dokumentiert werden, da diese nach einer Konvertierung nicht mehr verfügbar ist bzw. nicht übertragen werden konnte.<br />Wichtig sind hier vor allem die Informationen, die zu einem Dokument vorliegen und die auch nach der Konvertierung noch verfügbar sein sollen. Dies können Informationen über Änderungs- und Erstelldatum, Urheber, Ursprung und Struktur des Dokuments sein. Diese Informationen gingen bei einer einfachen Umwandlung, etwa von Office-Dokumenten in ein PDF-Format, unweigerlich verloren. <br />Aber gerade in größeren Projekten, in denen unzählige Dokumente konvertiert werden, sind solche Informationen ungemein wichtig, um den Überblick zu behalten oder um gezielt in deren Metadaten suchen zu können. Am Besten lässt sich dies am Beispiel einer eMail-Konvertierung verdeutlichen.
<i><b>Beispiel eMail-Konvertierung</b></i><br />Der jadice Server untersucht und durchleuchtet die eMail auf deren Inhalt und leitet die weiteren Schritte ein. Eine eMail kann dabei sehr komplex strukturiert sein und unter Umständen neben dem reinen eMail-Text auch mehrere Anhänge mit weiteren Dokumenten unterschiedlicher Formate enthalten. Diese Anhänge müssen erkannt, entschlüsselt, ausgepackt und aufbereitet werden, ohne dass wichtige Informationen wie Metadaten verloren gehen. <br /> Erkennt der jadice Server beispielsweise ein ZIP-Dokument als Anhang, so leitet er automatisch eine Extraktion der enthaltenen Dokumente ein, welche dann erneut untersucht werden. Dies können Word-Dokumente mit zusätzlichen OLE und XLS-Informationen sein. <br /> Ziel einer Konvertierung ist es nun, all diese Informationen über Dateiinhalte und Dateianhänge zu bewahren. Das heisst, die Software muss Datenblätter erstellen können, die sowohl Aufschluss über die Struktur der Ursprungsdatei geben können als auch über die Metadaten der enthalten Dokumente, wie Änderungsdatum, Ersteller und dergleichen. Dies geschieht in einzelnen, automatisch ablaufenden Konvertierungsstufen, die kaskadiert ausgeführt werden. Am Ende der Konvertierung sollte ein Dokument vorliegen, das alle Informationen des Ursprungsdokuments in geordneter und übersichtlicher Form wiedergibt.
<b>Eine Konvertierungssoftware muss also folgende Anforderungen erfüllen:</b>
<ul><li>Dynamisches System, das den Einbau zusätzlicher Konvertierungsstufen ermöglicht.</li><li>Automatische Erfassung, Erkennung, Voranalyse und Formatierung der Eingangsdokumente ohne Qualitäts- und Informationsverlust.</li><li>Erstellung von Datenblättern, die Aufschluss über Status- und Metadaten liefern.</li><li>Erstellung von Inhaltsverzeichnis und Trennblättern, die Informationen über Struktur und Inhalt der einzelnen Dateielemente beinhalten.</li></ul>
Der jadice Server erfüllt diese Anforderungen problemlos und bleibt darüber hinaus flexibel, da neue Formate einfach über Drittanwendungen eingebunden werden können. Zudem führt er durch eine Fremdkomponente nach Abschluss der Formatierung eine Qualitätsvalidierung durch.
Siehe auch <b><a href="fileadmin/./download/de/dokumentenmanagement/technischeInfos/S013_SERVER_Konvertierung_01.pdf" title="Initiates file download" target="_self" class="download" >Technische Informationen</a></b>.
&nbsp;]]></content:encoded>
			
			
			<pubDate>Wed, 04 Feb 2009 13:27:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Speicherverbrauch analysieren</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/speicherverbrauch-analysieren/</link>
			<description>Beim Test von JAVA-Anwendungen ist es eine „good practice&quot;, den Speicherverbrauch der JVM zu...</description>
			<content:encoded><![CDATA[Beim Test von JAVA-Anwendungen ist es eine „good practice&quot;, den Speicherverbrauch der JVM zu beobachten, um die Größe des zu allokierenden Speichers (JVM-Optionen -Xms und -Xmx) zu ermitteln und Memory Leaks auszuschließen.
<b>Trau dem Task-Manager nicht ...</b>
Die Versuchung liegt nahe, dabei zunächst auf Betriebssystem-Tools (wie den Windows Task-Manager) zurückzugreifen. Aber Achtung: die dort gemeldete Speicherauslastung entspricht mitnichten dem tatsächlichen Speicherverbrauch der JVM, denn:
<ul><li>Im Task-Manager wird der Speicherverbrauch des JAVA-Prozesses angezeigt und nicht der JAVA Heap Size, der eigentlich interessiert, weil dies der durch die Anwendung verbrauchte Speicher ist. Neben dem JAVA Heap Size benötigt der Prozess weiteren Speicher für die JVM und deren Datenstrukturen.</li><li>Im Task-Manager wird häufig nicht der von der JVM tatsächlich verwendete Speicher dargestellt. Gibt die JVM in Zuge ihrer Garbage Collection Speicher frei, so wird dies von der JVM nicht zwangsläufig an das Betriebssystem propagiert. Im Task-Manager wird also ein viel höherer Wert angezeigt als der JAVA Heap tatsächlich einnimmt. Folge: Als Beobachter hat man den Eindruck, als ob die JAVA-Anwendung ständig „am Anschlag&quot; arbeitet, obwohl der Anwendung noch massig Speicher zur Verfügung steht.</li></ul>
<b>... sondern lieber den JAVA-Bordmitteln</b>
Deshalb kann ein zuverlässiges Speicher-Monitoring nur mit Werkzeugen erfolgen, die exakte Werte für den JAVA Heap Size bzw. dessen einzelne Speicherbereiche (Eden Space, Survivor Space...) liefern. Ein ideales Tool ist die JConsole, die seit JAVA 5 zum Lieferumfang des JDK gehört (zu finden im Verzeichnis JDK_HOME/bin).
Musste unter JAVA 5 die Verwendung der JConsole beim Starten der Anwendung über die Kommandozeile mit dem Parameter <i>-Dcom.sun.management.jmxremote</i> noch explizit ermöglicht werden (Starten des JMX Agent), ist seit JAVA 6 ein unmittelbares Verbinden der JConsole auf den JAVA-Prozess möglich. Hierzu wird jconsole.exe aufgerufen und auf eine lokale oder eine Remote-Anwendung verbunden.
Neben der Auslastung der einzelnen Speicherbereiche (Heap und Non-Heap) lassen sich über die JConsole weitere Kenngrößen verfolgen (z.B. Threads). Sägezahnförmige Verläufe der Speicherauslastungen lassen erkennen, dass bei der Garbage Collection jeweils wieder ausreichend Speicher freigegeben wird und z.B. kein Memory Leak in der Applikation vorliegt. Auch eine Detailanalyse der einzelnen Memory Pools und deren Tuning über JVM Optionen wird damit möglich. 
Alternativ kann zur Analyse auch VisualVM eingesetzt werden. VisualVM wird seit JAVA 6 Update 7 als Bestandteil des JDK mit ausgeliefert - es vereint einige der bisherigen JDK-eigenen Werkzeuge unter einer modernen, Netbeans-basierten Oberfläche. Die analysierten Anwendungen können dabei auch in älteren Umgebungen laufen - die zur Überwachung des Speicherverbrauchs erforderliche Monitoring-Funktionalität wird beispielsweise bereits ab JAVA 1.4.2 unterstützt. Der volle Funktionsumfang ist jedoch erst gegeben, wenn die Anwendung in einer JAVA 6-Umgebung abläuft.
<b>Referenzen</b><br /> <b><a href="http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html" target="_blank" rel="nofollow" >http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html<sup><img class="rendericon" src="uploads/RTEmagicC_7340fc8257.gif.gif" align="absmiddle" border="0" width="7" height="7" alt="" /></sup></a></b><br /> <b><a href="https://visualvm.dev.java.net/" target="_blank" rel="nofollow" >https://visualvm.dev.java.net/<sup><img class="rendericon" src="uploads/RTEmagicC_7340fc8257.gif.gif" align="absmiddle" border="0" width="7" height="7" alt="" /></sup></a></b>]]></content:encoded>
			
			
			<pubDate>Thu, 15 Jan 2009 10:26:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Neue Version jadice 4.2.0.0 Beta</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/neue-version-jadice-4200-beta/</link>
			<description>Die neue jadice Generation 4.2.0.0 Beta steht unseren Kunden als Preview zur Verfügung!</description>
			<content:encoded><![CDATA[Die Preview-Version bietet die Möglichkeit vor dem offiziellen Release einen ersten Eindruck der neuen Features und des neuen Look&amp;Feels zu erhalten. Als Preview ist diese Version nicht für produktive Zwecke geeignet, sondern dient nur der Ankündigung. Anfang des Jahres 2009 erscheint die finale Version für produktive Einsätze.<br /><br /><b>Folgende neue Features sind in jadice 4.2.0.0 enthalten:</b><br /><br /><b>Neues Look&amp;Feel</b><br />jadice präsentiert sich im neuen Kleid. Das bisherige Erscheinungsbild ist überarbeitet und durch ein neues, attraktives Iconset bereichert worden. Wer jedoch weiterhin das bekannte Erscheinungsbild wünscht, kann dies jederzeit wieder aktivieren.<br /><br /><b>Neue Farbskalierungsfilter</b><br />Für die Skalierung von Farbbildern wird nun ein neuer Algorithmus eingesetzt, der zwar einen etwas höheren Rechenaufwand erfordert, dafür aber mit deutlich hochwertigeren Ergebnissen als bisher aufwartet. Gab es bisher teilweise nicht immer die gewünschte Anzeigequalität beim Verkleinern von Farbbildern, kann jetzt auch hier ein optimales Ergebnis erzielt werden. jadice bietet verschiedene Filtertechniken an, die nach gewünschter Anzeigequalität durch den Integrator ausgewählt werden können.<br /><br /><b>Qualifiziertes Logging</b><br />Dank des neuen Logging-Frameworks der Version 4.1 ist es möglich, bestehende Loggingsysteme der Einsatzumgebung einfach und nahtlos auch an die jadice document platform anzubinden. Mit dem qualifizierten Logging der neuen Version 4.2 ist es nun auch möglich, auf spezielle Ereignisse oder Fehler, die in vorigen jadice Versionen nicht zugänglich waren, gezielt zu reagieren.<br /><br /><b>Pure Java Implementation eines TrueType-Renderers</b><br />Bedingt durch eine Reihe von Fehlern in der TrueType Implementation der JavaVM, wurde ein neues rein Java basierendes TrueType-Rendering implementiert. Dies sorgt für eine höhere Zuverlässigkeit und eine deutlich gesteigerte Anzeigequalität. Speziell können damit auch native JavaVM Deadlocks umgangen werden, die bei einzelnen Schriften auftreten können.<br /><br /><b>Fehleranzeige im jadice viewer</b><br />Der jadice viewer verfügt nun neu über eine ein- und ausschaltbare Anzeigefläche, die Warnungen und Fehler zum geladenen Dokument meldet. Als Warnung sind die Vorgänge definiert, bei denen jadice versucht zu korrigieren oder zu ersetzen. Sofern die Anzeige schwierig und eine Korrektur nicht möglich ist, erscheint das als Fehler. Sind zusätzliche Informationen zu den Meldungen vorhanden, können diese auch eingesehen werden.]]></content:encoded>
			
			
			<pubDate>Thu, 18 Dec 2008 15:09:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Neue Version: jadice document platform 4.1.0.11 </title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/neue-version-jadice-document-platform-41011/</link>
			<description>In die aktuelle Version wurden folgende Änderungen und Erweiterungen aufgenommen: 
Verbesserungen...</description>
			<content:encoded><![CDATA[<div class="action-body"><div class="action-body">In die aktuelle Version wurden folgende Änderungen und Erweiterungen aufgenommen: 
<ul><li>Verbesserungen und Korrekturen der Interpretation von Indexed Color Images. Vor der aktuellen Version konnte es durch die Anwendung des Skalierugsalgorithmus auf Index Color Images zu schwarzen Flächen oder Streifen in der Dokumentdarstellung kommen. Mit der aktuellen Version kann dieser Fehler nicht mehr auftreten.</li></ul>
<ul><li>Mit der aktuellen Version ist eine deutliche Performance-Verbesserung bei der Interpretation von LZW komprimierten Daten vorgenommen worden.</li></ul>
<ul><li>Die Verarbeitung von Annotationsereignissen bei Verwendung des modalen Texteditordialogs sind korrigiert worden.</li></ul>
Um eine neue Version zu erhalten, wenden Sie sich einfach an <b><a href="mailto:solutions@levigo.de" title="Opens window for sending email" class="mail" >solutions@levigo.de</a></b>.</div></div>]]></content:encoded>
			
			
			<pubDate>Mon, 08 Dec 2008 13:18:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Was tun bei Memory Leaks?</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/was-tun-bei-memory-leaks/</link>
			<description>OutOfMemoryErrors analysieren</description>
			<content:encoded><![CDATA[Viele Entwickler haben es bereits erlebt: Java-Anwendungen geht mitunter der Speicher aus. Normalerweise verhält sich die Anwendung dann &quot;seltsam&quot; oder reagiert nicht mehr und im Logfile ist ein OutOfMemoryError zu sehen.<br />Solange man sich in der Entwicklungsumgebung befindet und das Verhalten reproduzierbar ist, ist die Analyse einfach. Man bedient sich eines (in der Regel kommerziellen) Profilers und analysiert mit dessen Hilfe die Objektreferenzen und den von diesen allokierten Speicher. Memory Leaks kommt man damit leicht auf die Spur. <br />Schwieriger ist die Situation, wenn das Problem nur sporadisch oder nur in der Produktiv-Umgebung auftritt.
<b>HPROF-Dateien</b><br />Dort kann man über die JVM-Option <i>-XX:+HeapDumpOnOutOfMemoryError</i> erzwingen, dass in einer OutOfMemory-Situation ein binärer Dump des Speicherinhalts in eine HPROF-Datei (Dateiname&nbsp;&nbsp; &quot;java_pidXXXX.hprof&quot;) geschrieben wird. Unterstützt wird dieses Feature in Java 6 sowie ab 5.0u7, in Java 1.4 nur bedingt. HPROF-Dumps sind plattformunabhängig und können recht groß werden (entsprechend dem Speicherverbrauch der JVM zum Zeitpunkt des Snapshots).
Vorteil: Exakt zum Fehlerzeitpunkt wird ein Dump geschrieben, der sich anschließend auswerten lässt. Insbesondere bei Server-basierten Anwendungen kann dies sehr hilfreich sein, um Memory Leaks von einem schlichtweg zu klein konfigurierten Java Heap zu unterscheiden.<br />Über das Kommandozeilen-Tool jmap (sowie 5 und 6) kann außerdem zu einem beliebigen Zeitpunkt ein Memory Snapshot einer laufenden JVM angefordert werden (jmap -dump:file=path_to_file java_pid).
<b>Analyse</b><br />Zur Analyse der HPROF-Dateien kommt mit Java 6 das Utility jhat mit (Aufruf: jhat java_pidXXXX .hprof). Bei großen Dumps wirkt jhat allerdings überfordert. Sehr gute Erfahrungen konnten hingegen mit YourKit als kommerziellem Profiler gemacht werden, der das Laden von HPROF-Snapshots unterstützt. Die Darstellung der Objekte und der von diesen belegte Speicher entspricht der gewohnten Ansicht einer Profiling-Session, so dass die Ursachenfindung in gewohnter Weise erfolgen kann.]]></content:encoded>
			
			
			<pubDate>Mon, 01 Dec 2008 09:30:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Applet Alternative: Windows URL Handler </title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/applet-alternative-windows-url-handler/</link>
			<description>Applets sind schön. Nun, zumindest theoretisch. Die Realität ist meist ernüchternd: schlecht oder...</description>
			<content:encoded><![CDATA[Applets sind schön. Nun, zumindest theoretisch. Die Realität ist meist ernüchternd: schlecht oder gar nicht dokumentierte SecurityExceptions, Eigenheiten der Browser, umständliche Konfiguration und starke Einschränkungen beim Memory Management. Dennoch sind Applets derzeit extrem populär. Viele Anwendungen gehen weg von Fat-Clients hin zu Portal-Lösungen. Hier werden jedoch auch weiterhin teilweise Applets für diverse Tätigkeiten benötigt. Ein Beispiel hierfür ist der Einsatz der jadice document platform zur Anzeige von Dokumenten. Es gibt jedoch eine Alternative zu Java Webstart und den Java Applets, welche im Folgenden beschrieben werden soll. Das folgende Beispiel ist stark vereinfacht und enthält keine Verarbeitung von Fehlern. Ziel war es, das Prinzip möglichst einfach darzustellen. Auch die benötigte Konfiguration der Registry ist auf ein Minimum reduziert und man sollte auch den Empfehlungen von Microsoft Beachtung schenken (Integrieren der optionalen Angaben, etc.)
Windows bietet die Möglichkeit, eigene URL Handler für Protokolle zu definieren. Dies wird unter <b><a href="http://msdn.microsoft.com/en-us/library/aa767914%28VS.85%29.aspx" target="_blank" rel="nofollow" >http://msdn.microsoft.com/en-us/library/aa767914(VS.85).aspx<sup><img class="rendericon" src="uploads/RTEmagicC_7340fc8257.gif.gif" align="absmiddle" border="0" width="7" height="7" alt="" /></sup></a></b> sehr gut beschrieben. Benötigt werden zwei Dinge: Ein Eintrag in der Windows Registry und eine Anwendung, die eine entsprechende Anfrage behandeln soll. Möchte man ein JadicePanel für die Anzeige von Dokumenten nutzen, kann beispielsweise das Protokoll „<i>jadvwr</i>&quot; definiert werden. Wird eine URL mit dem Protokoll Prefix <i>jadvwr:</i> angefordert, wird die Anfrage an die dafür registrierte Anwendung weitergereicht. Für die Konfiguration kann ein Registry Eintrag ähnlich dem folgenden verwendet werden:
<p class="code"><div class="codeContent"><pre class="code-java">Windows Registry Editor Version 5.00<br /><br />[HKEY_CLASSES_ROOT\jadvwr]<br />@=<span class="code-quote">&quot;URL:Jadice Viewing Protocol&quot;</span><br /><span class="code-quote">&quot;URL Protocol&quot;</span>=&quot;&quot;<br /><br />[HKEY_CLASSES_ROOT\jadvwr\shell]<br /><br />[HKEY_CLASSES_ROOT\jadvwr\shell\open]<br /><br />[HKEY_CLASSES_ROOT\jadvwr\shell\open\command]<br />@=<span class="code-quote">&quot;\&quot;</span>E:\\IEUrlHandler\\view.bat\<span class="code-quote">&quot; \&quot;</span>%1\&quot;&quot;</pre></div></p>
Hierbei wird angenommen, dass das Batch-Script <i>E:\IEUrlHandler\viwer.bat</i> existiert. Dieses könnte in etwa wie folgt aussehen:
<p class="code"><div class="codeContent"><pre class="code-java">set WD=%~dp0<br />java -cp %WD%jadice-documentplatform-4.1.0.9-all.jar;%WD%bin/ Startup %1<br />set WD=</pre></div></p>
Dieses Script leitet den Aufruf lediglich an eine Java Applikation weiter. Hierbei ist die Zielapplikation ein Wrapper um das JadicePanel, welcher die angeforderte URL nimmt und die Daten mittels Java API auf den Client zieht und zur Anzeige bringt:
<p class="code"><div class="codeContent"><pre class="code-java"><span class="code-keyword">import</span> java.io.File;<br /><span class="code-keyword">import</span> java.io.FileOutputStream;<br /><span class="code-keyword">import</span> java.io.IOException;<br /><span class="code-keyword">import</span> java.io.InputStream;<br /><span class="code-keyword">import</span> java.net.URL;<br /><br /><span class="code-keyword">public</span> class Startup {<br />	<span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] args) <span class="code-keyword">throws</span> Throwable {<br /><br />		<span class="code-comment">// url prefix jadvwr: entfernen<br /></span>		<span class="code-object">String</span> url = args[0].substring(7);<br />		InputStream is = <span class="code-keyword">new</span> URL(url).openStream();<br />		File f = File.createTempFile(<span class="code-quote">&quot;jad-url-handler&quot;</span>, <span class="code-quote">&quot;tmpdoc&quot;</span>);<br />		writeToFile(is, f);<br /><br />		<span class="code-object">String</span> openTarget = <span class="code-quote">&quot;-open=&quot;</span> + f.getAbsolutePath();<br />		JadicePanel.main(<span class="code-keyword">new</span> <span class="code-object">String</span>[]{openTarget});<br />	}<br /><br />	<span class="code-keyword">private</span> <span class="code-keyword">static</span> void writeToFile(InputStream is, File f)<br />			<span class="code-keyword">throws</span> IOException {<br />		FileOutputStream out = <span class="code-keyword">new</span> FileOutputStream(f);<br />		<span class="code-object">byte</span>[] buf = <span class="code-keyword">new</span> <span class="code-object">byte</span>[2048];<br />		<span class="code-object">int</span> read;<br /><br />		<span class="code-keyword">while</span> ((read = is.read(buf)) &gt; -1) {<br />			out.write(buf, 0, read);<br />		}<br />		out.flush();<br />		out.close();<br />	}<br />}</pre></div></p>
Der hier gewählte Weg eines Wrappers um die Klasse JadicePanel ist lediglich ein Beispiel, um die Logik möglichst einfach darzustellen. Entscheidend sind bei diesem Vorgehen zwei Dinge: Der erste Parameter, welcher der Anwendung übergeben wird, ist die URL, die angefordert wurde. Diese enthält noch das Protokoll <i>jadvwr:</i>, welches für die weitere Verarbeitung entfernt wird.<br /> Die zweite wichtige Eigenschaft (oder vielmehr Annahme) ist, dass der Rest der URL in einer Art und Weise zur Verfügung steht, die die Java API verarbeiten kann. Es wird über URL.openStream() ein InputStream zum Dokument erfragt und die Daten daraus in eine temporäre Datei geschrieben.<br /> Die temporäre Datei wird dann als Parameter an JadicePanel.main(String[]) weitergereicht.
Mit diesem einfachen Beispiel ist es möglich in Webanwendungen URLs, ähnlich der folgenden, zu integrieren:
<pre>jadvwr:<b><a href="http://host.company.com/documentstore/some-document.pdf" target="_blank" rel="nofollow" >http://host.company.com/documentstore/some-document.pdf<sup><img class="rendericon" src="uploads/RTEmagicC_7340fc8257.gif.gif" align="absmiddle" border="0" width="7" height="7" alt="" /></sup></a></b></pre>
Der Vorteil dieser Methode ist, dass der Umgang mit der JavaVM und auch der Umgang mit Browser-Eigenheiten deutlich gemindert wird. Nachteilig ist wiederum die Notwendigkeit eine Anwendung auf alle Arbeitsstationen auszurollen.]]></content:encoded>
			
			
			<pubDate>Thu, 27 Nov 2008 13:26:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Neue Version: jadice document platform 4.1.0.10</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/neue-version-jadice-document-platform-41010/</link>
			<description>In der aktuellen Version wurden  folgende Änderungen und Erweiterungen aufgenommen:   Erweiterung...</description>
			<content:encoded><![CDATA[In der aktuellen Version wurden  folgende Änderungen und Erweiterungen aufgenommen: <br /> <br /> <b>Erweiterung der PNG Predictor Unterstützung bei PDF Dokumenten</b><br /> Vor der aktuellen Version wurden lediglich PNG Predictoren für 8-bit kodierte Daten unterstützt. PNG Predictoren werden genutzt, um (meist) Bilddaten so zu strukturieren, dass diese möglichst effektiv komprimiert werden können.<br />Dieser Bugfix betrifft Exceptions mit dem Wortlaut <i>PNG filter type #XX unknown</i>.<br /><b><br />Interpretation von </b><b>PDF Rectangles überarbeitet und korrigiert</b><br />Bei manchen Dokumenten wurden Größen der Seiten nicht korrekt berechnet. Eine Anzeige einzelner oder aller Seiten war nicht möglich. <br /> <br /> Um eine neue Version zu erhalten, wenden Sie sich an <b><a href="mailto:solutions@levigo.de" >solutions@levigo.de</a></b>.<br /> ]]></content:encoded>
			
			
			<pubDate>Wed, 12 Nov 2008 11:41:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>JBIG2 Anbindung über ImageIO</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jbig2-anbindung-ueber-imageio/</link>
			<description>Um das Lesen von  JBIG2 Bilddaten zu ermöglichen, wurde ein JBIG2 Reader mit ImageIO...</description>
			<content:encoded><![CDATA[Um das Lesen von  JBIG2 Bilddaten zu ermöglichen, wurde ein JBIG2 Reader mit ImageIO Schnittstellen-Anbindung in Java implementiert. Die entwickelte Implementierung dekodiert selbst riesige JBIG2 Bilddaten mit einer Größe von z.B. 6600x5100 Pixeln in wenigen 100 ms.<br /><br />JBIG2 ist ein hochoptimiertes Kompressionsverfahren für Bi-Level Bilddaten (Schwarz-Weiss) und unterstützt sowohl verlustfreie als auch verlustbehaftete Kompression. Es erreicht schon im verlustfreien Modus im Vergleich zu TIFF G4 eine 3 bis 5 mal bessere Kompressionsrate.<br />Eine mögliche Anwendung ist das Einbetten von JBIG2 Daten in PDF/A Dateien zur Langzeitarchivierung.]]></content:encoded>
			
			
			<pubDate>Wed, 12 Nov 2008 10:45:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Jadice search: Programmatische Textsuche, Part 1</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/jadice-search-programmatische-textsuche-part-1/</link>
			<description> Die jadice document platform enthält eine integrierte Suche nach textuellen Inhalten eines...</description>
			<content:encoded><![CDATA[ Die jadice document platform enthält eine integrierte Suche nach textuellen Inhalten eines Dokuments. Neben der bereits vorgefertigten GUI kann die Suche programmatisch gesteuert werden, um beispielsweise eigene Such-Masken zu implementieren.
<pre>com.levigo.jadice.addon.search.SearchRequest</pre>
Mittels des 
<pre>SearchRequest</pre>
wird die Suchanfrage konfiguriert und letztlich auch ausgeführt.
Beispiel:<br /> Möchte man die Seiten eines geladenen Dokuments nach dem String „java&quot; durchsuchen, so genügt bereits folgendes Code-Fragment:
<p class="code"><div class="codeContent indent"><pre class="code-java">SearchRequest request = <span class="code-keyword">new</span> SearchRequest();<br />request.setPages(document.getPages());<br />request.setSearchStrings(<span class="code-keyword">new</span> <span class="code-object">String</span>[]{<span class="code-quote">&quot;java&quot;</span>});<br />request.addSearchResultListener(<span class="code-keyword">new</span> MyListener());<br />request.execute();</pre></div></p>
Die Methode setSearchStrings erlaubt es, mehrere Strings für eine Suche zu setzen. Es ist zu beachten, dass diese in einer „ODER&quot;-Relation zueinander stehen. Die Suche wird jeden Treffer melden, der einen der angegebenen Strings enthält.<br /> Die Method <i>execute()</i> führt die Suchanfrage letztlich aus. Wichtig sind hierbei zwei Dinge:
<ul class="alternate" type="square"><li><i>execute()</i> wird asynchron ausgeführt. Die Anfrage wird an die jadice interne SearchEngine weitergereicht und in einem eigenen Thread bearbeitet.</li><li>Es kann derzeit nur eine Suche zur selben Zeit ausgeführt werden. Wird die Methode <i>execute() </i>gerufen, während noch eine weitere Suche läuft, wird die laufende Suchanfrage abgebrochen.</li></ul>
Um die Ergebnisse der Suche zu erhalten wird eine Implementation des <i>com.levigo.jadice.addon.search.SearchResultListener</i> registiert. Dieser wird über jeden Treffer informiert. Eine Implementation könnte beispielsweise wie folgt aussehen:
<p class="code"><div class="codeContent indent"><pre class="code-java"><span class="code-keyword">public</span> class MyListener <span class="code-keyword">implements</span> SearchResultListener {<br />    <span class="code-keyword">public</span> void searchResultFound(SearchResultEvent e) {<br />        Result result = e.getResult();<br />        Page page = result.getPage();<br />        <span class="code-object">String</span> text = result.getSelectedText();<br />        <span class="code-comment">// page und text verarbeiten<br /></span>    }<br />}</pre></div></p>
Das SearchRequest verfügt über weitere kleine Helfer, die vor allem für die Verwendung innerhalb einer Suchmaske von Interesse sind. Mehr Informationen hierzu wird der zweite Teil dieser Artikel-Reihe „enthüllen&quot;.]]></content:encoded>
			
			
			<pubDate>Tue, 23 Sep 2008 15:25:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>So viele Dateien? Die jadice document platform 4.1</title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/so-viele-dateien-die-jadice-document-platform-41/</link>
			<description>Mit Erscheinen der jadice document platform 4.1 wurde die Auslieferung grundlegend überarbeitet....</description>
			<content:encoded><![CDATA[Mit Erscheinen der jadice document platform 4.1 wurde die Auslieferung grundlegend überarbeitet. Daraus resultierte eine Reihe neuer Dateien und Ordner.
Der beste Startpunkt für ein Verständnis dessen, was die document platform bietet, stellt die <i>documentation.html</i> dar. Diese enthält eine Reihe von Informationen zu technischen und auch organisatorischen Themen, wie etwa der Struktur der Auslieferung. Über den Link „Distribution Overview&quot; ist eine Übersicht über die gesamte Auslieferung erhältlich, welche die einzelnen Verzeichnisse und deren Inhalte beschreibt. Die Änderungen, die an den einzelnen Versionen vorgenommen wurden sind unter „Release notes&quot; zu finden. Hier wird aufgelistet welche Änderungen und Erweiterungen eingeflossen sind und welche evtl. entfernt wurden.]]></content:encoded>
			
			
			<pubDate>Tue, 23 Sep 2008 15:19:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Deadlocks analysieren </title>
			<link>http://www.levigo.de/dokumentenmanagement/developer-blog/article/deadlocks-analysieren/</link>
			<description>Jeder Entwickler kennt sie und hat auch schon - meist schmerzliche - Bekanntschaft mit ihnen...</description>
			<content:encoded><![CDATA[Jeder Entwickler kennt sie und hat auch schon - meist schmerzliche - Bekanntschaft mit ihnen gemacht: Deadlocks. Die Anwendung reagiert nicht mehr oder nicht mehr wie erwartet. Wie findet man nun heraus, worin das Problem im Detail liegt? 
Innerhalb einer IDE, wie beispielsweise Eclipse, ist eine Analyse verhältnismäßig einfach. Problematisch wird es jedoch, wenn die Probleme außerhalb der IDE auftauchen und ein Remote-Debugging nicht möglich ist.
Die JavaVM bietet für diese Fälle einen einfachen Weg den aktuellen Zustand aller Threads in einem Stack-Trace ähnlichen Format auszugeben: dem so genannten Thread Dump. Dieser kann über zwei Wege erstellt werden: 
<ul><li><i>STRG + PAUSE</i>: Wird diese Tastenkombination in einem Java Konsolen-Fenster betätigt, erstellt die JavaVM einen Thread Dump und gibt diesen auf der Konsole aus. Der Vorteil dieser Variante ist, dass keine zusätzlichen Werkzeuge benötigt werden. Ein Thread Dump ist somit sehr einfach zu erstellen. </li><li>Mittels der Tools <span class="important">jps</span> und <span class="important">jstack</span> (zu finden im Verzeichnis jdk-home/bin): Leider steht das Tool jstack unter Windows erst mit JDK 1.6 zur Verfügung. Unter Linux ist es bereits im JDK 1.5 enthalten. Bei der Ausführung von jps werden die PIDs (Process-IDs) aller laufenden Java-Anwendungen ausgegeben. Startet man nun jstack mit der PID des zu untersuchenden Prozesses, gibt das Kommando den Thread Dump auf der Standard-Ausgabe aus. Der Vorteil bei der Nutzung von jstack ist, dass hier nun der Thread Dump ausgegeben wird. Somit können sich keine konkurrierenden Ausgaben auf System.out &quot;dazwischen mogeln&quot;. </li></ul>
Prinzipiell handelt es sich bei Thread Dumps um ein ASCII basiertes Format. Für eine komfortable Betrachtung sei aber auf das <b><a href="https://tda.dev.java.net/" title="Opens external link in new window" target="_blank" class="external-link-new-window" >Werkzeug TDA</a></b> verwiesen, welches die Daten in einem strukturierten UI zur Verfügung stellt.]]></content:encoded>
			
			
			<pubDate>Mon, 22 Sep 2008 16:20:00 +0200</pubDate>
			
		</item>
		
	</channel>
</rss>