Maven- Aufbau eines JEE Projekts

Automatisches Deployment ist so eine Herausforderung die man nicht einfach mal so nebenher macht. Allgemein gesehen geht es recht fix wenn man mal verstanden hat wie alles funktioniert.

Zum einen wird ein funktionsfähiges Maven Projektgruppe benötigt. Das heißt eine JEE Anwendung mit ihren Komponenten:

  • JPA
  • EJB
  • Web
  • EAR

Container. Das Ganze mit vernünftigen pom.xml Files die auch richtig funktionieren.

POM.XML für  JPA Projekt.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.kuw.example</groupId>
  <artifactId>ExampleJPA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ExampleJPA</name>
  <description>Java Persistence for Example</description>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
		<groupId>org.eclipse.persistence</groupId>
		<artifactId>eclipselink</artifactId>
		<version>2.5.0</version>
	</dependency>
  </dependencies>
</project>

POM.XML für EJB Projekt:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.kuw.example</groupId>
  <artifactId>ExampleEJB</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>ejb</packaging>
  <build>
    <sourceDirectory>ejbModule</sourceDirectory>
    <resources>
      <resource>
        <directory>ejbModule</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-ejb-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <ejbVersion>3.1</ejbVersion>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
  	<dependency>
	 	<groupId>com.kuw.example</groupId>
		<artifactId>ExampleJPA</artifactId>
		<version>${project.version}</version>
		<scope>provided</scope>
		<type>jar</type>
	</dependency>   
	<dependency>
		<groupId>javax.mail</groupId>
		<artifactId>mail</artifactId>
		<version>1.4.7</version>
	</dependency>
	<dependency>
		<groupId>org.apache.commons</groupId>
	  	<artifactId>commons-lang3</artifactId>
	  	<version>3.1</version>
	</dependency>
	<dependency>
		<groupId>org.eclipse.persistence</groupId>
		<artifactId>eclipselink</artifactId>
		<version>2.5.0</version>
	</dependency>
	<dependency>
		<groupId>javax.ejb</groupId>
		<artifactId>javax.ejb-api</artifactId>
		<version>3.2</version>
	</dependency>
  </dependencies>
  <name>QuatEJB</name>
</project>

POM.XML für Web Projekt inkl. Primefaces

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.kuw.example</groupId>
  <artifactId>Example</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>Quat</name>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
	  <dependency>
		<groupId>javax.faces</groupId>
		<artifactId>jsf-api</artifactId>
		<version>2.1</version>
	</dependency>
  	<dependency>
  		<groupId>org.apache.directory.studio</groupId>
  		<artifactId>org.apache.commons.io</artifactId>
  		<version>2.4</version>
  	</dependency>
  	<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>1.3</version>
	</dependency>
	<dependency>
	 	<groupId>com.kuw.example</groupId>
		<artifactId>ExampleEJB</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<scope>provided</scope>
		<type>ejb</type>
	</dependency>
	<dependency>
	 	<groupId>com.kuw.example</groupId>
		<artifactId>ExampleJPA</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<scope>provided</scope>
		<type>jar</type>
	</dependency>
  	<dependency>
		<groupId>org.primefaces.extensions</groupId>
		<artifactId>primefaces-extensions</artifactId>
		<version>0.7.1</version>
	</dependency>
   <dependency>
		<groupId>org.primefaces.extensions</groupId>
		<artifactId>resources-ckeditor</artifactId>
		<version>0.7.1</version>
	</dependency>
	<dependency>
		<groupId>org.primefaces.extensions</groupId>
		<artifactId>resources-codemirror</artifactId>
		<version>0.7.1</version>
	</dependency>
		<dependency>
		<groupId>org.primefaces.extensions</groupId>
		<artifactId>all-themes</artifactId>
		<version>1.0.8</version>
	</dependency>
    <dependency>  
	    <groupId>org.primefaces</groupId>  
	    <artifactId>primefaces</artifactId>  
	    <version>3.5</version>  
	</dependency>                                 
  </dependencies>
  <repositories>
	<repository>  
	    <id>prime-repo</id>  
	    <name>PrimeFaces Maven Repository</name>  
	    <url>http://repository.primefaces.org</url>  
	    <layout>default</layout>  
	</repository>  
  </repositories>
</project>

POM.XML für EAR.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.kuw.example</groupId>
  <artifactId>ExampleEAR</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>ear</packaging>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-ear-plugin</artifactId>
        <version>2.8</version>
        <configuration>
          <earSourceDirectory>EarContent</earSourceDirectory>
          <generateApplicationXml>false</generateApplicationXml>
          <version>6</version>
          <defaultLibBundleDir>lib</defaultLibBundleDir>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <name>ExampleEAR</name>
  <url>www.ka-und-we.de</url>
  <dependencies>
  	<dependency>
  		<groupId>com.kuw.example</groupId>
  		<artifactId>ExampleEJB</artifactId>
  		<version>${project.version}</version>
  		<type>ejb</type>
  	</dependency>
  	<dependency>
  		<groupId>com.kuw.example</groupId>
  		<artifactId>QsMPrime</artifactId>
  		<version>${project.version}</version>
  		<type>war</type>
  	</dependency>
  	<dependency>
  		<groupId>com.kuw.example</groupId>
  		<artifactId>ExampleJPA</artifactId>
  		<version>${project.version}</version>
  		<type>war</type>
  	</dependency>
  </dependencies>
</project>

Primefaces 3.5 inkl. Upload im Internet Explorer 10

Für alle die Primefaces in der Version 3.5 verwenden und auch den Internet Explorer 10 nutzen gibt es leider einen kleinen Bug im Upload. Der Fehler ist aber sehr schnell zu beheben mit einem kleinen Workaround im CSS.

.fileinput-button input {
    -moz-transform : none !important;
    border : none !important;
    border-width : 0 !important;
    transform : translate(-300px, 0) scale(4) !important;
    font-size : 23px !important;
}
* + html .fileinput-button {
    line-height : none !important;
    padding : 2px 15px !important;
}

Bandscheibenvorfall, so ein Schmerz

Was nichts neues sein dürfte für andere ist für mich eine sehr unangenehme Erfahrung. Bisher habe ich wirklich schon einiges an Brüchen, Verletzungen etc davon getragen aber so ein Bandscheibenvorfall hat es in sich.

Schlimmer als mein Autounfall… Ja so könnte man es nennen. Die dauerhaften Schmerzen zermürben einen regelrecht. Stehen und Laufen fällt einem schwer und im Bayreuther Medcenter hab ich viele andere gesehen denen es nicht viel besser zu gehen scheint. Eine Spritze später und ca. eine endlose Stunde zur Überwachung im Wartezimmer konnte ich wieder gehen. Naja sofern man es gehen schimpfen kann.

Aber erstmal zu meinem Autounfall…

Bei meinem Autounfall vor ein paar Jahren wurde mir meine Hüftgelenk links ausgekugelt. Dabei hat sich ein kleines Knochenstück gelöst und ich hatte tierische Schmerzen ohne Schmerzmittel. Nach dem Einrenken war alles wie verflogen. Noch ein paar Tage Bettruhe im Krankenhaus und danach auf Krücken nach Hause. Ja, ich war wie zuvor auch schon ziemlich unausstehlich die 4 Wochen auf Krücken und ohne Bewegung. Aber da ging es nicht anders.

Mein Medcenter Aufenthalt…

Beim Bandscheibenvorfall ist es etwas anders. Du versuchst unter ziemlich starken Schmerzen deine Gymnastik zu machen. Deinen Willen zu behalten diese vermalledeite Gelenk wieder in Schwung zu bekommen und wirst bestraft mit Schmerzen. Bis einem schlecht wird. Das Gefühl hatte ich gestern am 2.7.13 das erste mal. Tierische Schmerzen weil ich ohne Schmerzmittel ins Medcenter bin und versucht habe korrekte Antworten dem  , ich würde durchaus sagen kompetenten Doktor zu geben und auf meine Fehlstellung bzw. pelzigen Fuß hinzuweisen. Nachdem ich ein paar motorische Übungen machen musste um die Beweglichkeit und Einfühlsamkeit nachzuweisen durfte ich mich direkt auf einer Liege platzieren. Keine OP notwendig solange keine motorischen Schäden erkennbar sind, das ist doch schon mal eine „gute“ Nachricht. Nachdem ich auch einen sehr kompetenten Osteopathen kenne der mir sehr gerne helfen würde wurde mein Wunsch auf ein Rezept für den Osteopathen leider verwehrt. Jetzt werde ich doch noch mal meine Hausärztin kontaktieren dürfen. Markus, der Osteopath hat mir einiges meiner Meinung logisch wunderbare Sachen vor Augen geführt die man in diesem Bereich angehen könnte. Mittlerweile habe ich auch schon viele kennen gelernt denen zum einen der Ostepathe oder auch Akupunktur geholfen hat. Ich werde mir ersterem jetzt starten und nichts unversucht lassen.

Ein paar interessante Sachen zum Thema Bandscheibe habe ich noch gefunden bei Youtube. Ziemlich interessant und auch effektiv habe ich vor allem diese Video hier empfunden. Zum teil sind nicht alle Übungen für einen empfehlenswert aber wenn man ausprobiert was einem Gut tut kann man sehr gut in seinen täglichen Ablauf integrieren.

Für alle anderen die das auch schon durchgemacht haben meinen Respekt es ist wirklich sehr anstrengend es durchzuhalten und auf seinem Arsch einfach liegen zu bleiben.

Aufschlussreich und interessant könnte auch dieser Beitrag sein. Regt einem doch etwas zum Denken an…

 

JEE Anwendung: QUAT

Es ist ein attraktives Entwicklungsumfeld im JEE Bereich. Webapplications mit EJB3 Anbindung und Managed- Beans.

Im Standard JEE6 wurde viel Aufmerksamkeit auf Annotations gelenkt und die vereinfachte Kommunikations der Beans mit dem Frontend. Der neue JEE7 Standard, erst ein paar Wochen alt wird jetzt speziell die Ausrichtung im Bereich Ajax im Blick haben. Light- Weight Communication mit dem Backend wenn man so will. Wenige Daten die geliefert werden und somit die Performance von Applikationen beschleunigt.

Ich werde euch hier ein kleines Beispiel für eine JEE Anwendung erstellen inkl. der aktuellen Version von Eclipse Kepler und Glassfish 4.

Die JEE Anwendung wird mit dem Plugin von Primefaces 3.5 laufen. Einem leistungsstarken Ajax- Framework das basierend auf jQuery UI viel interaktive Bearbeitungsmöglichkeiten bietet.

Nachteil von Primefaces. Die jQuery UI hat, meines erachtens nicht gerade ein business orientiertes Interfaces Design. Die Buttons und Eingabemasken wirken sehr groß und für ein schlankeres Aussehen müssen einige CSS Classes überarbeitet werden.

Auch muss man sich vor Augen führen das durch den zusätzlichen CSS und Javascript Aufwand die einzelnen Seiten etwas Content- lastiger werden und somit die Ladezeit im Gegensatz zu reinem JSF2 länger sein können. Da man aber sehr viele Daten nachladen kann wird nur der Erstaufruf etwas länger benötigen. Sobald alle Daten Clientseitig gecached wurden wird die Performance deutlich besser sein.

Maven wird in diesem kleinen Projekt eine weiter Rolle spielen. Um möglichst einfach alle Komponenten bauen zu lassen ohne sich um die Libraries kümmern zu müssen oder die Libraries im SVN bereit zu stellen werde ich mich darum kümmern das das Projekt mit Maven gebaut werden kann.

Vorteile:

  • Versionierung des Projektes anhand von Maven- einstellungen.
  • Einfaches Updaten von Libraries
  • Schnelles Bauen von Projekten

Nachteil:

Langwieriges einstellen der Maven Poms um einen erfolgreichen Build zu generieren. Mittlerweile habe ich auch festgestellt das nicht alle POM Einstellungen Plattformunabhängig sind. Es kann sein das Builds teilweise unter Windows laufen und auf dem Mac Fehler verursachen weil Abhängigkeiten fehlen.

Projektname: QUAT

Das Projekt das ich seit längerem realisiere nennt sich QUAT. Mittlerweile stecken knappe 2 Jahre Entwicklung in dem System. Angefangen hat es mit einer einfachen PHP Anwendung die mittlerweile ihre Alter erreicht hat und dank unzähliger PHP Updates auch einiges an Funktionen nicht mehr unterstützen bzw. nur noch per Workaround laufen.

QUAT wird z.B. für ein Callcenter verwendet werden können das sich mit der Qualitätssicherung von Mitarbeiter beschäftigt. Überall wo die Leistung vom Mitarbeiter eine Bewertung benötigt und die Qualität in Gesprächen oder direkter Kommunikation am Telefon geprüft werden muss um den Erfolg der Firma zu steigern oder gezielt Schulungen für Mitarbeiter anzubieten.

Aber erstmal genug um den Nutzen der Software. Wir möchten uns die technische Seite etwas genauer ansehen und somit den Aufbau der Software.

[HIER WERDEN ALLE ZUKÜNFTIGEN ARTIKEL ZU QUAT GELISTET UND VERLINKT|