18. April 2007

HibernateTools & Ant

Wie funktioniert die Codegenerierung für Hibernate mit ANT?

Task "
reveng" erzeugt xml-Mappingfiles aus Datenbank-Tabellen, die in der Datei "hibernate.reveng.xml" angegeben werden.

Task "javagen" erzeugt POJOs und DAO-Klassen.

Task "ddlgen" erzeugt DDL-Skript zur Erstellung/Änderung der Tabellen

Task "hiberate-docgen" erzeugt eine JavaDoc-ähnliche Dokumentation der Tabellen und generierten Klassen


build.xml:

<project name="MyProj" default="all" basedir=".">
<property file="build.properties"/>

<path id="toolslib">
<path location="${dbjar}"/>
<path location="."/>
<fileset dir="${hibernate.path}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${hibernate.tools.path}">
<include name="**/*.jar"/>
</fileset>
</path>

<taskdef name="hibernatetool"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="toolslib"/>



<target name="reveng" description="Reverse Engineer from DB">
<hibernatetool destdir="./hib-gen">
<jdbcconfiguration configurationfile="hibernate.cfg.xml"
packagename="de.rfeest.dataaccess.orm"
revengfile="hibernate.reveng.xml"/>
<hbm2hbmxml destdir="./hib-gen"/>
</hibernatetool>
</target>
<target name="javagen" description="Create Java classes from xml">
<hibernatetool destdir="./src">
<configuration configurationfile="./src/hibernate.cfg.xml"/>
<hbm2java destdir="./src"/>
<hbm2dao destdir="src"/>
</hibernatetool>
</target>
<target name="ddlgen" description="Create DDL from xml">
<hibernatetool destdir="./src">
<configuration configurationfile="./src/hibernate.cfg.xml"/>
<hbm2ddl export="false" outputfilename="./create-tables.ddl"/>
<hbm2doc/>
</hibernatetool>
</target>
<target name="hibernate-docgen" description="Create DDL from xml">
<hibernatetool destdir="../orm">
<configuration configurationfile="src/hibernate.cfg.xml"/>
<hbm2doc/>
</hibernatetool>
</target>


</project>

16. April 2007

DataSources unter Tomcat 6

In Tomcat 6 gibt es zur Definition von DataSources keine <ResourceParams> mehr wie unter 4.x und 5.x. Sie werden nun wie folgt definiert:

<Resource name="jdbc/MYDATASOURCE"
scope="Shareable"
type="javax.sql.DataSource"
auth="Container"
url="jdbc:db2:dbinst"
maxIdle="10"
maxOpenPreparedStatements="50"
maxActive="50"
validationQuery="Select xxx from yyy FETCH FIRST 1 ROWS ONLY FOR FETCH ONLY"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="600000"
driverClassName="COM.ibm.db2.jdbc.app.DB2Driver"
maxWait="10000"
username="myuser"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
poolPreparedStatements="true"
password="hispass"
removeAbandoned="true"
removeAbandonedTimeout="180"
logAbandoned="true"
/>

5. April 2007

ADF TreeTable und Tree Controls zeigen Aufklapp-Symbol obwohl keine Kindelemente vorhanden sind

Problem: Das JSF ADF-Control TreeTable und Tree stellt Daten in hierachischer Form dar.
Es kann vorkommen, dass ein Element ein Aufklapp-Icon hat, obwohl es keine Kindelement hat.

Ursache: Die Kindelement-Variable ist nicht null, sondern hat nur die size=0. Das Control muss aber null vorfinden, damit es das Aufklapp-Icon nicht anzeigt.

Lösung: Die Methode isContainer() überschreiben. Diese Methode wird vom Control verwendelt, um zu ermitteln ob es Kindelemente gibt.

new ChildPropertyTreeModel(serv, "childValues") {
public boolean isContainer() {
if (getRowData() != null) {
IGuardValues value = (IGuardValues) getRowData();

if (value.getChildValues() != null &&

value.getChildValues().size() > 0) {
return true;
}

}