Ontwikkelomgeving

Inleiding

Het project is opgezet met NetBeans projecten. Dit zijn Ant scripts die op zich ook zonder NetBeans werken, maar het gebruik van NetBeans is wel erg handig. De huidige bestanden zijn in het NetBeans 6.8 formaat. Installeer Ant (1.7.1 of hoger) zodat deze met "ant" vanaf de command-line werkt.

Uitzetten NetBeans plugin
NetBeans heeft een enorm vervelende plugin genaamd "SOAP Web Services". Deze past zomaar bestanden in het project aan zonder dat te vragen. Deactiveren van de plugin helpt niet, je moet deze echt uninstallen via het Tools, Plugin, Installed menu ("Show details" aanvinken). N.B. onder Linux kan je de plugin mogelijk alleen als root verwijderen.

De NetBeans projecten

openwion-persistenceJava Persistence Entities en configuratie voor opslag gegevens in database
openwion-serviceImplementatie van KLIC netbeheerder webservices en monitoringswebapplicatie

JAX-WS 2.2

Het project maakt gebruik van de JAX-WS 2.2 API voor webservices (package javax.xml.ws). Bij verschillende JRE versies wordt een oudere versie meegeleverd wat een probleem oplevert bij het compileren of draaien:

Java 5Niet meegeleverd
Java 6 u3 en ouderJAX-WS 2.0
Java 6 u4 en nieuwerJAX-WS 2.1

(bron)

Het is bij gebruik van Java 6 daarom nodig om de webservices-api.jar van JAX-WS 2.2 te plaatsen in de "endorsed" directory in $JAVA_HOME/lib/endorsed, voor het compileren met NetBeans.

De fout die optreedt bij het compileren bij gebruik van JAX-WS API kleiner dan 2.2:

Compiling 69 source files to /home/matthijsln/dev/wion/openwion-service/build/web/WEB-INF/classes
/home/matthijsln/dev/wion/openwion-service/src/java/nl/kadaster/service/KlicBeheerdersInformatieService.java:50: cannot find symbol
symbol  : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
location: class javax.xml.ws.Service
        super(KLICNETBEHEERDERSERVICE_WSDL_LOCATION, KLICNETBEHEERDERSERVICE_QNAME, features);
/home/matthijsln/dev/wion/openwion-service/src/java/nl/kadaster/service/KlicBeheerdersInformatieService.java:58: cannot find symbol
symbol  : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
location: class javax.xml.ws.Service
        super(wsdlLocation, KLICNETBEHEERDERSERVICE_QNAME, features);
/home/matthijsln/dev/wion/openwion-service/src/java/nl/kadaster/service/KlicBeheerdersInformatieService.java:66: cannot find symbol
symbol  : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
location: class javax.xml.ws.Service
        super(wsdlLocation, serviceName, features);
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
3 errors
/home/matthijsln/dev/wion/openwion-service/nbproject/build-impl.xml:446: The following error occurred while executing this line:
/home/matthijsln/dev/wion/openwion-service/nbproject/build-impl.xml:257: Compile failed; see the compiler error output for details.

Installeren Metro JAX-WS Reference Implementation in de servlet container
De implementatie van JAX-WS die wordt gebruikt is Metro (de referentieimplementatie). De JAR-bestanden dienen op het classpath beschikbaar te zijn tijdens het uitvoeren van de webapplicatie. Hoe dit in te stellen verschilt per servlet container. Bij Metro wordt voor Tomcat een Ant installatiescript "metro-on-tomcat.xml" meegeleverd. Handmatige installatie kan als volgt:

  • Maak de directory shared/lib in de Tomcat directory
  • Kopieer de volgende bestanden uit de lib directory van Metro naar de net gemaakte directory:
    • webservices-rt.jar
    • webservices-tools.jar
    • webservices-extra.jar
    • webservices-extra-api.jar
    • webservices-api.jar (voor Tomcat 5 moet deze in common/endorsed)
  • Voeg in conf/catalina.properties aan de shared.loader property toe: ${catalina.home}/shared/lib/webservices-rt.jar

Indien Metro niet juiste geinstalleerd staat krijg je bij het runnen van de applicatie de exception:

SEVERE: Error configuring application listener of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener

Xalan en Xerces

Xalan en Xerces zijn vereist bij het runnen. Bij de binary distributie van Xalan wordt ook Xerces meegeleverd. Plaats de volgende JAR's op het endorsed pad. Let op dat Tomcat 6 een andere endorsed directory gebruikt door de opstartoptie -Djava.endorsed.dirs; bijvoorbeeld -Djava.endorsed.dirs=/usr/local/apache-tomcat-6.0.20/endorsed.

  • serializer.jar
  • xalan.jar
  • xercesImpl.jar
  • xml-apis.jar

Database

Gegevens worden gepersisteerd met de Java Persistence implementatie van Hibernate in combinatie met Hibernate Spatial. De configuratiegegevens staan in persistence.xml. Standaard staat het databasedialect ingesteld op PostgreSQL met PostGIS. De hostname van de database staat standaard op "openwion-dbserver". Deze hostname kan je in je hosts file (/etc/hosts of C:\Windows\System32\drivers\etc\hosts) zetten zodat je voor het ontwikkelen het persistence.xml bestand niet hoeft te wijzigen in je Subversion working copy.

Opzetten PostgreSQL met PostGIS database
Installeer PostgreSQL en PostGIS. Onder Windows kan je de Stack Builder gebruiken om een PostGIS template aan te maken. Volg onder Linux de instructies in de README file bij de postgis package om een PostGIS template aan te maken.

Instructies voor het maken van een template_postgis met Ubuntu 9.10 (postgresql en postgis packages al geinstalleerd):

$ sudo su - postgres 
$ createdb template_postgis
$ createlang plpgsql -d template_postgis
$ psql template_postgis -f /usr/share/postgresql/8.4/contrib/postgis.sql
$ psql template_postgis -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql
$ psql template_postgis -c "grant insert,update,select,delete on geometry_columns to public"
$ psql template_postgis -c "grant select on spatial_ref_sys to public"
$ psql template_postgis -c "update pg_database set datistemplate='true' where datname='template_postgis'"

Maken van de openwion user en database:

$ createuser --pwprompt --no-createdb --no-createrole --no-superuser openwion
(typ het wachtwoord in: openwion)
$ createdb openwion --owner=openwion --template=template_postgis
$ psql openwion -c "create schema data authorization openwion; alter database openwion set search_path=data,public"

Genereren DDL-script
Met Hibernate kan automatisch een DDL-script (CREATE TABLE e.d.) worden gegenereerd waarmee het benodigde schema aangemaakt kan worden. Dit kan worden gestart met een Ant script. Ga met een command-line venster naar de directory waar de openwion-persistence broncode staat (hierin staat het bestand build.xml) en typ het commando "ant schemaexport". Hierna wordt het bestand "schema-export.sql" gemaakt in de "database" subdirectory. Voer de volgende scripts uit om de database aan te maken:

  1. schema-export.sql
  2. add_geometry_columns.sql
  3. add_indexes.sql

Aanmaken eerste gebruiker
Ga met een command-line venster naar de openwion-service directory en voer het commando "ant hash-password" uit. Typ een nieuw wachtwoord voor het "admin" account dat gebruikt moet worden om in te loggen op de monitoringsapplicatie. Hierna worden een salt en een gehashed password weergegeven. Vul deze in in het SQL statement in het "insert_gebruiker.sql" script en voer deze uit.

Controleren of verbinding kan worden gemaakt
Voordat je probeert of de applicatie verbinding kan maken met de database, probeer dit eerst met de command-line vanaf de server waarop de applicatie komt te draaien met "psql -h openwion-dbserver -U openwion openwion". Indien dit geen fouten geeft zou de applicatie ook verbinding moeten kunnen maken met de database. Werkt dit niet, dan zal de applicatie ook een foutmelding geven.

Last modified 9 years ago Last modified on 09-04-10 09:37:25