Mittwoch, 23. Juni 2010

Eclipse Helios (3.6) ist raus!

Ich habs natürlich gleich mal runtergeladen.
It's new and shiny!

Mittwoch, 16. Juni 2010

J2EE Security im IBM WebSphere Application Server 7 (WAS7)

Wie in jedem normalen J2EE Servlet Container kann auch beim WAS die Security über Rollen eingestellt werden. Voraussetzung ist natürlich, dass die J2EE-Anwendung Security Roles definiert und nutzt. Die Definition erfolgt wie gewohnt in der web.xml:



    <security-role id="loeschen">
<description>Bla bla </description>
<role-name>loeschen</role-name>
</security-role>




Im WebSphere muss die Sicherheit für die deployten Anwendungen generell aktiviert werden. Dies geschieht in der Admin-Console unter Sicherheit > Sichere Verwaltung, Anwendungen und Infrastruktur:



Der Haken "Anwendungssicherheit aktivieren" muss gesetzt werden.

Beim Deployment der Anwendung im WebSphere (egal, ob über Skript oder die Admin-Console) liest der Server die definierten Rollen aus.
Nach dem Deployment kann der Administrator dann den Rollen der Anwendung verschiedene Benutzer oder Benutzer-Gruppen zuordnen. Dazu in der Admin-Console unter Anwendungen > Enterprise-Anwendungen auf die Anwendung klicken. Dann auf "Zuordnung von Sicherheitsaufgabenbereichen zu Benutzern/Gruppen" klicken:





Im folgenden Dialog werden die Rollen der Web-Anwendung aufgelistet. Hier die Rolle markieren, der man Gruppen oder Benutzer zuordnen möchte und auf "Benutzer suchen" oder "Gruppe suchen" klicken.




Darauf öffnet sich der Suchen-Dialog.



Über den Suchen-Button können verfügbare Benutzer (oder Gruppen) gesucht werden. Dann braucht man nur noch auf der linken Seite den Benutzer auszuwählen und über den ">>"-Button in die Liste der zugeordneten Benutzer bewegen. Mit OK wird die Einstellung gespeichert. Danach noch das obligatorische Speichern in der Masterkonfiguration und die Rollenzuordnung steht in der Anwendung zur Verfügung.

Automatisches Deployment von Gruppen-Rollen-Zuordnungen:
Möchte man die in der Websphere-Oberfläche eingestellten Zuordnungen beim nächsten Deployment automatisch vergeben, so gibt es eine Möglichkeit, diese im ear-File der Anwendung mitzuliefern.

Die Einstellungen speichert der WebSphere im Profil-Verzeichnis in der Konfiguration der Anwendung im Ordner

...\wp_profile\config\cells\Rechner-Name\applications\mein_ear.ear\deployments\mein_ear\META-INF

Dabei kommt es auf die beiden Dateien
application.xml
ibm-application-bnd.xmi

an. Diese sind in den META-INF-Ordner des ear-Projektes zu kopieren. Beim nächsten Deployment des ear-Files werden so die Gruppen-Rollenzuordnungen automatisch mit installiert.



Mittwoch, 9. Juni 2010

Mehrzeilige Tooltips in JSF bzw. HTML

W3Schools.com

<a href="#" title="Der einzeilige Tooltip">W3Schools.com</a>


<p title="Free Web tutorials">W3Schools.com</p>


Machmal genügt ein einzeiliger Tooltip nicht.




<style type="text/css">
a.de_wwaag_alma_a_info{
position:relative;
z-index:24;
color:#ffffff;
background-color:#ff0000;
text-decoration:none
}

a.de_wwaag_alma_a_info:hover{z-index:25;}

a.de_wwaag_alma_a_info span{display: none}

a.de_wwaag_alma_a_info:hover span{
display:block;
position:absolute;
width:400px;
padding:5px;
border:1px solid #000;
background-color:#ffffce;
text-align: left
<style>





<f:verbatim>
<a class="de_wwaag_alma_a_info">
<img alt="" src="/alma-portlets/img/alma_info.png">
<span>Mit Hilfe einer jährlich extern durchgeführten Beschwerdeführer-Befragung
soll eine höhere Kundenzufriedenheit erreicht werden. Einige Beschwerdevorgänge
(z. B. Mahnfälle) eignen sich nicht dazu, mit einem zeitlichen Abstand durch Dritte
noch einmal telefonisch beim Kunden in Erinnerung gerufen zu werden. Das Ankreuzfeld
soll Ihnen nach Ihrem Ermessen ermöglichen, diesen Beschwerdefall von künftigen
Befragungsaktionen auszunehmen
</span>
</a>
</f:verbatim>

Montag, 7. Juni 2010

Sanfte Migration von Hibernate zu JPA

Ist es möglich JPA und hibernate gleichzeitig zu verwenden?
Wie kann ich alle Vorteile von Hibernate verwenden und zugleich möglichst name am Standard bleiben?
Wie konfiguriert man JPA?


Das zentrale Konfigurationsfile bei JPA heißt persistence.xml.
Es muß sich im Source-Folder im META-INF Verzeichnis befinden.
Im nun folgenden Beispiel wird angenommen, das Hibernate als Persistenzschicht eingesetzte wurde. Eine einfache Möglichkeit ist es das JPA mittels einer bestehenden hibernate.cfg.xml zu konfigurieren.



<persistence>
<persistence-unit name="manager1" type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml">
</property>
</properties>
</persistence-unit>
</persistence>


In einer Real-Word-Anwendung würde man Spring zur Konfiguration der Anwendung verwenden. Das Obige Beispiel sollte für JPA-Tools oder einfache Test auf jeden Fall ausreichen.



Eclipse bietet mit seinen WebTools schon Unterstützung für JPA.




Eingebaute Unterstützung für JPA innerhalb Eclipse.
Gut hat aus unserer Sicht die Generierung von Klassen aus dem Datenbankmodel funktioniert.



Mittwoch, 2. Juni 2010

Javascript Währung und Telefonnummer validator

Es kommt häufiger vor, dass man eine Telefonnummer oder einen Währungsbetrag mittels Javascript validieren möchte. Die folgenden 2 Methoden erfüllen diesen Zweck.
Viel Spaß damit.


function validate_currency(inputField) {
if (inputField.value!="") {
inputField.value = inputField.value.replace(/^\s+|\s+$/g, ''); //trimming the string
var Ergebnis = inputField.value.search(/^[1-9][0-9]{0,2}(.[0-9]{3})*(\,[0-9]{2})$/);
if (Ergebnis == -1) {
inputField.style.backgroundColor = "#FFDDCF";
inputField.focus();
inputField.value = inputField.value; //Trick to set the cursors
} else {
inputField.style.backgroundColor = "";
}
}
}

function validate_telefonnummer(inputField) {
//Überprüfe auf gültiges Format
if (inputField.value!="") {
var Ergebnis = inputField.value.search(/(?:(?:\+|00)[1-9][0-9]{0,3} ?)?(?:\([1-9][0-9]{0,5}\)|0?[1-9][0-9]{0,5})(?: (?:\/ ))?[1-9](?: ?[0-9]){3,7}(?: ?-(?: ?[0-9]){1,5})?/);
if (Ergebnis == -1) {
//document.getElementById("de_wwag_alma_history_EX123").style.display=""; //nicht mehr none -> sichbar
//return false; //formular wir nicht abgeschickt
inputField.style.backgroundColor = "#FFDDCF";
inputField.focus();
return false;
} else {
inputField.style.backgroundColor = "";
}
}
}

Dienstag, 18. Mai 2010

Download JDK 1.5

Der Download von JDK 1.5 über die Java-Homepage ist nur noch über ein Registrierungsformular möglich, in dem man seine Email-Adresse und seinen Namen angeben muss.

Hintergrund ist, dass Java 1.5 seit 3. November 2009 nicht mehr weiterentwickelt wird (End of Service Life, EOSL) und der Download eigentlich nicht mehr möglich sein soll. Siehe Previous Releases auf der Java-Homepage.

Benötigt man aber trotzdem ein JDK 1.5, kann man das oben genannte Formular ausfüllen und sich eine Email mit dem Download-Link schicken lassen oder gleich den folgenden Download-Link benutzen:

http://java.sun.com/javase/downloads/5u22/jdk

Freitag, 14. Mai 2010

Porlet und AJAX

Wie funktioniert AJAX mit Portlets?
Harmonisieren diese 2 Techniken überhaupt miteinander?

Die erste Version der Porlets war nicht für AJAX geeignet.
Um trotzdem AJAX machen zu könnnen mußt der XHR-Request am Porletkontainer vorbeischießen, um dem Anfrager die passende Anwort zusenden zu können.
Dies war/ist kein schöner Designansatz, da der Portalgedanke ausgehebelt wird.
Man benötigt ein zusätzliches Servlet, dass die AJAX-Anfragen entgegen nimmt.




Mit dem neuen JSR 286 sieht, das nun anders raus.
Durch die serveResource()-Methode kann man nun dem Anfrage Inhalte liefert,
die durch diesen angefragt wurden (z.B. XML, PDFs, TXT und JSON).




Normalerweise besteht, das Porlet aus 2 Teilen, dem eigentlichen Portlet und einer JSP, die für die Darstellung verwendet wird.

Um innerhalb einer JSP die serverResource()-Methode des Porlets aufrufen zu können verwendet man den <portlet:resourceURL>-Custom-Tag. Diesem Tag kann man optionale parameter mitschicken, die dann vom porlet ausgewertet werden können.


<a href="http://www.blogger.com/%3Cportlet:resourceURL%3E%09%09%09%09%09%09%09%09%3Cportlet:param%20name=" resource="" value="weitereAnliegen">
<portlet:param name="method" value="view">
<param name="weiteresAnliegenId" value="${actAnliegen.id}">
</portlet:param>" onclick="de_wwag_alma_showPopup(this.href,'pop','1000','900','auto');return false;">${actAnliegen.lfdNr}</portlet:param></a>