Wie am Wochenende auf Heise.de zu lesen war, wurde eine positive Schaltsekunde eingeschoben, um einer Verschiebung zwischen Uhrzeit und Tagesverlauf entgegenzuwirken. Genau diese Sekunde führt auf Linuxsystemen zu Problemen. Die Auswirkungen sind: extrem hohe CPU-Last Anwendungen können nich mehr erreicht werden Server können nicht mehr erreicht werden Um dieses Problem zu beheben, gibt es zwei Lösungen. Die erste Lösung ist…
JEE
Apache JMeter ist ein Werkzeug, mit dem man Lasttests für Webanwendungen durchführen kann. Dabei werden konfigurierbar viele parallele Threads gestartet, die nach einem bestimmten Schema auf die Webanwendung zugreifen. Um konkrete Performance-Kennzahlen (KPIs) zu testen ist es sinnvoll, die tatsächliche Anzahl der Zugriffe zu beschränken. Zu diesem Zweck bietet JMeter den Baustein "ConstantThroughputTimer". Mit dieser Komponente kann die Menge der…
Nicht selten kommt es vor, dass Speicherprobleme erst im Wirkbetrieb auftreten. Die Gründe dafür sind oft, dass das System nicht ausreichend oder gar nicht unter realen Lastbedingungen getestet wurde. Bei Systemen mit redaktionellen Inhalten (z. B. Content Management Systeme) ergibt sich aus der steigenden Anzahl der Inhalte in Verbindung mit Abhängigkeiten und Caching eine wachsende Belastung. In der Testphase sind…
Java Content Repository (JCR) Das Java Content Repository ist eine Spezifikation für den einheitlichen Zugriff auf Content , Struktur und Metadaten in einem Repository. Die JCR-Version 1.0 wurde unter JSR 170 und die Version 2.0 unter JSR 283 veröffentlicht. Das Repository besteht aus einem oder mehreren Workspaces. Jeder dieser Workspaces enthält eine hierarchische Baumstruktur, die aus Items besteht. Ein Item…
Vor der Einführung von CDI (JSR-299/JSR-330) und EJB 3.1 war die Umsetzung von asynchronen Prozessen relativ umständlich und der Einsatz von JMS meist unumgänglich. Ich möchte hier kurz zeigen, dass es mit EJB 3.1 eine weitere Möglichkeit gibt schnell und effizient ein klassisches Beobachterpattern umzusetzen ohne auf JMS zurückgreifen zu müssen. Dazu benötigen wir zunächst einen Service der Ereignisse (Events)…
Java-Applikationen zurück in den Sandkasten
Die Security von Anwendungen nimmt einen immer stärkeren Stellenwert in der Softwareentwicklung ein. Neben der Absicherung des Betriebssystems (Principle of least privilege) und der Netzinfrastruktur (Firewalls und N-Tier-Architekturen) kann man auch die Anwendung selber absichern.
Um sicherzustellen, dass bei XWork-Redirects die richtige Action samt korrekten Parametern aufgerufen wird, kann das Logging für die Klasse com.opensymphony.webwork.dispatcher.ServletRedirectResult auf DEBUG gesetzt werden. Dann werden die Redirect-Pfade im atlassian-confluence.log aufgeführt.
Was ist Profiling? Als Profiler werden Programmierwerkzeuge bezeichnet, die das Laufzeitverhalten von Software analysieren. Es gibt unterschiedliche Problembereiche in der Softwareentwicklung, die durch ineffiziente Programmierung ausgelöst werden. Ein Profiler hilft dem Entwickler durch Analyse und Vergleich von laufenden Programmen die Problembereiche aufzudecken. Daraus kann man Maßnahmen zur strukturellen und algorithmischen Verbesserung des Quellcodes ableiten. Die häufigste Anwendung eines Profilers ist…
Im Rahmen eines Projektes sollten XML Mockup Dateien in einer Datenbank gehalten und über eine Webservice-Schnittstelle ausgelesen werden. Für gewöhnlich habe ich aus der XSD per JAXB Java Klassen generiert und in Entity Beans gemappt, die anschließend in die Datenbank geschrieben werden. Um dieses, aus meiner Sicht recht aufwendige und fehleranfällige Mapping in die Entity Beans zu umgehen, habe ich…
Wie in meinem letzten Beitrag angekündigt, wollte ich mich tiefergehend mit den Möglichkeiten des Grails Portlet Plugins beschäftigen. Da die Dokumentation nicht besonders aussagekräftig ist, galt es zunächst herauszufinden, ob man nicht nur Deskriptoren und Portlet Views generieren sondern auch Domain-Objekte im Portlet verwenden kann. Dafür habe ich zu Testzwecken ein Domainobjekt mit dem Namen Blogpost erstellt: grails create-domain-class de.communardo.liferay.grails.portlet.Blogpost Die…
Asynchrone Prozesse werden sehr häufig in Enterprise Applikationen eingesetzt um Abläufe zu beschleunigen. Um diese mit EJB 3.0 zu realisieren kam man um den Einsatz von Message Driven Beans und JMS nicht herum, da diese die einzige Möglichkeit darstellten asynchrone Aufrufe zu realisieren. Mit der Einführung von EJB 3.1 und der neuen Annotation @Asynchronous wird es nun möglich, Methoden direkt…
Unser Teamoffsite in Eschdorf am 13.11.09 war unter Anderem dem Thema gpars (http://gpars.codehaus.org/) gewidmet, ein Groovy-Framework, welches es erlaubt, parallele Software zu entwickeln, ohne dabei die Komplexität der dafür vorgesehenen Java-Mechanismen kennen zu müssen. Folgende Konzepte werden von gpars unterstützt: - Aktoren (auch verteilte) - Datenflussoperatoren - Sicherungen für veränderliche Objekte (Safe) sowie - nebenläufige Operationen auf Collections und -…
Es kommt gelegentlich vor, dass bei Serveranwendungen die SSL-Zertifikate ausgetauscht werden. Insbesondere bei einem gleichzeitigen Austausch von CA-Zertifikaten (weil z.B. eine neue Sub-CA für die Signierung neuer Zertifikate verwendet wird) kann es dabei dazu kommen, dass eine Applikation, die als Client auf die Serveranwendung zugreift die Vertrauenskette des Serverzertifikates nicht mehr prüfen kann und dann z.B. in Java mit einer SSLHandShakeException aussteigt. Um hier Abhilfe zu schaffen, benötigt man die CA-Zertifikate, die bei SSL-Handshakes mitgeschickt werden. Um diese zu extrahieren bietet sich das Tool s_client
der openssl-Bibliothek an.
Seit meinem letzten Grails Projekt verfolge ich aufmerksam jede Neuigkeit zum Thema Groovy und Grails. Aber auch die Entwicklung von Portlets für den freien Portal Server Liferay liegt im Bereich meines Interesses. Als ich dann auf groovyblogs.org (empfehlenswerte Quelle!) laß, dass ein Grails Plugin released wurde, mit dem man Portlets für Liferay erstellen kann, war klar, dass ich das ausprobieren…
Wer kennt das nicht? Man debuggt sich Zeile für Zeile durch den Code um Fehler in komplexen Algorithmen zu finden. Das Auslesen von primitiven Datentypen oder Strings klappt ziemlich gut. Wenig hilfreich ist allerdings die Darstellung von Kalenderobjekten. Mit Hilfe der in Eclipse angebotenen DetailFormater lassen sich Objekte im Debug-Modus beliebig formatieren. Für ein Objekt vom Typ "java.util.GregorianCalendar" könnte die…
Rechte und Rollen Mit dem CoreMedia JavaEditor können Berechtigungsgruppen oder Rollen erstellt und Nutzern zugeordnet werden. Über die Gruppen können Berechtigungen sehr feingranular auf Dokumentebene eingestellt werden. Bei der Authentifizierung wird das Nutzerobjekt mit seinen Berechtigungen (GrantedAuthority) geladen und im SecurityContext abgelegt. Für die Autorisierung kann in allen Schichten der Architektur darauf zugegriffen werden. Autorisierung im Template Wenn es sich…
Erstellung eines CoreMedia-AuthenticationProviders für das Spring Security Framework Einleitung und Funktionsweise Neben dem Aufbau von geschlossenen Benutzergruppen (GBGs) im CMS kann es auch andere Gründe geben, das CoreMedia UserRepository für die Authentifizierung von Nutzern zu verwenden. Das Spring Security Framework (ehemals ACEGI Security) bietet Funktionalitäten für die Authentifizierung und Autorisierung von Nutzern. Im Folgenden Klassendiagramm sind die Interfaces und Klassen…
Am 13./14.9.2008 fand erstmals die Berlin.jar an der FHTW Berlin statt. Die Java Konferenz wurde durch die Java User Group Berlin Brandenburg sehr gut organisiert. Verteilt über beide Konferenztage gab es in fünf parallelen Tracks zahlreiche interessante Vorträge, sowie HandsOn Sessions und Workshops für die mehr als 250 Besucher. Einige Redner sind bereits von anderen Konferenzen bekannt. So gab Eberhard…
So ein SequenceGenerator ist schon eine feine Sache, vorallem bei der Verwendung von Relationalen Datenbanksystemen á la Oracle. Musste man sich ohne die Vorzüge des ORM (Object-Relational-Mapping) noch mit der händischen Erstellung von Sequenzen zur Incrementierung von Werten herumschlagen, erledigt Hibernate das Ganze voll automatisch mit zwei Zeilen Code. Die Tücken der Technik In meinem letzten Projekt zeigte sich jedoch ein…
Wenn man in Spring-Anwendungen zum Beispiel den Aufruf von Methoden loggen will, aber nicht in jeder gewünschten Methode eine Log-Anweisung einfügen möchte, kann man das Logging zentral als Aspekt definieren. Es können damit die Methodenaufrufe aller Klassen geloggt werden, die als Bean durch Spring verwaltet werden. Zu Beginn sollte die Bean für den Interceptor (advice) definiert werden. <bean id="methodLoggingInterceptor" class="MethodLoggingInterceptor"/> Danach…