JBOSS SEAM – Von Seam2 nach Seam3 mit CDI und Weld

Sonntag, 10. April 2011 von  
unter Fachartikel Architektur

Der Erfolg und die Weiterentwicklung Komponentenbasierter Software System mit JBOSS SEAM 2.2 resultierten schließlich in der Integration der weiterentwickelten Kern-Features von Seam2 in die JEE 6 Spezifikation und ihren Referenz-Implementierungen, z.B. dem JBoss6. Die folgende Graphik soll diese Entwicklung von Seam2 nach Seam3 veranschaulichen: 

Von SEAM2 nach SEAM3

 

Von Seam2 nach Seam3

Die neuen Seam3 Module

Bei Seam3 sind die zusätzlich zur neusten in JEE 6 bereits integrierten Implementierung der JSR-299 Specification namens CDI (Contexts und Dependency Injection) verfügbaren Features für JBoss6 als Seam3 Module (Extensions) importierbar. Diese Erweiterungen sind:

BPM, Mail, Drools, Internationalisierung, Faces, Remoting, Seam Framework, Persistence, Security, JMS.

Die JSR-299 (CDI) Implementierung namens “Weld“

Die in JEE 6 bereits integrierte CDI Implementierung der JSR-299 Spezifikation “CDI“ wird mit “Weld“ bezeichnet und ist im JavaEE 6 Standard der Referenz-Implementierungen im JBoss6 und GlassFish3 enthalten, somit also nicht mehr Teil von Seam3. Diese Basis Features beinhalten:

Configurations, Contexts, Dependency Injection, Events, Initialization, Interceptors.

Weld:

Weld

JBoss6 Standard JEE6 Features als Erweiterungen im Tomcat

Die Standard JEE6 Features können zu Tomcat, Jetty und der Java SE als Erweiterungen hinzugefügt werden, ganz ähnlich wie das “jboss-resteasy.jar“ auch im Tomcat zur Bereitstellung von RESTful Webservices verwendet werden kann. Bei Verwendung von Maven für Build und Deployment hätte die zugehörige pom.xml folgende repository und dependency Einträge und die web.xml die folgenden Einträge, um per Hibernate mittels OpenSessionInView Filter Daten aus dem Persistenz-Layer zu lesen und im JSON Format per Rest als WebService mit Hilfe des Bridge Design Patterns einerseits klassisch als fachliche Facade zum Aufruf der DAOs und andererseits als annotiertes REST-WebService Interface gemäß JAX-RS (Java API for RESTful Webservices):

pom.xml:

<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/maven-v4_0_0.xsd“>

    <modelVersion>4.0.0</modelVersion>

    <groupId>de.binaris.services</groupId>

    <artifactId>restfulwebservice</artifactId>

    <packaging>war</packaging>

    <name>RestfulWebService</name>

    <version>1.0.0-SNAPSHOT</version>

    <description>servicelayer for restful webservice-apps</description>

    <repositories>

    […]

    <!– For resteasy –>

        <repository>

            <id>jboss</id>

            <name>jboss repo</name>

            <url>http://repository.jboss.org/maven2</url>

            <snapshots>

                <enabled>false</enabled>

            </snapshots>

        </repository>

    […]

    <dependencies>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-webmvc</artifactId>

            <version>${spring.version}</version>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>org.jboss.resteasy</groupId>

            <artifactId>resteasy-jaxrs</artifactId>

            <version>${resteasy.version}</version>

            <exclusions>

                <exclusion>

                    <groupId>commons-httpclient</groupId>

                    <artifactId>commons-httpclient</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>tjws</groupId>

                    <artifactId>webserver</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>javax.servlet</groupId>

                    <artifactId>servlet-api</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>javax.servlet</groupId>

                    <artifactId>servlet-api</artifactId>

                </exclusion>

            </exclusions>

        </dependency>

        <dependency>

            <groupId>org.jboss.resteasy</groupId>

            <artifactId>resteasy-jaxb-provider</artifactId>

            <version>${resteasy.version}</version>

        </dependency>

        <dependency>

            <groupId>org.jboss.resteasy</groupId>

            <artifactId>resteasy-spring</artifactId>

            <version>${resteasy.version}</version>

        </dependency>

    […]

    <!– For jsonLib outputStream –>

        <dependency>

            <groupId>net.sf.json-lib</groupId>

            <artifactId>json-lib-ext-spring</artifactId>

            <version>1.0.2</version>

        </dependency>

    […]

web.xml:

<?xml version=“1.0″ encoding=“UTF-8″?>

    <web-app xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“    

    xmlns=http://java.sun.com/xml/ns/javaee

    xmlns:web=“http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd“   

    xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd“ version=“2.5″>

  <!– set to map the Resteasy servlet to something different from /* –>

  <context-param>

    <param-name>resteasy.servlet.mapping.prefix</param-name>

    <param-value>/rest</param-value>

  </context-param>

  <listener>

    <listener-class>

        org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap

    </listener-class>

  </listener>

  <!– any bean annotated with JAX-RS is automatically loaded (@Path…) –>

  <listener>

    <listener-class>

        org.jboss.resteasy.plugins.spring.SpringContextLoaderListener

    </listener-class>

  </listener>

  <servlet>

    <servlet-name>Resteasy</servlet-name>

    <servlet-class>

        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher

    </servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>Resteasy</servlet-name>

    <url-pattern>/rest/*</url-pattern>

  </servlet-mapping>

  <filter>

    <filter-name>openSessionInViewFilter</filter-name> 

    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

    </filter-class>

    […]

    <init-param>

      <param-name>singleSession</param-name>

      <param-value>true</param-value>

    </init-param>

    <init-param>

      <param-name>flushMode</param-name>

      <param-value>AUTO</param-value>

    </init-param>

    […]

  </filter>

  <filter-mapping>

    <filter-name>openSessionInViewFilter</filter-name>

    <url-pattern>/rest/*</url-pattern>

  </filter-mapping>

    […]

</web-app>

WebServiceRestImpl.java:

package de.binaris.services.restfulwebservice;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.ws.rs.Consumes;

import javax.ws.rs.DELETE;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.PUT;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.QueryParam;

import javax.ws.rs.core.Context;

import de.binaris.services.WebServiceBusinessFacade;

@Path(„/“)

@Produces(„application/json“)

public class WebServiceRestImpl implements IWebServiceRest {

    /*

     * the service facade

     */

    private WebServiceBusinessFacade webServiceFacade;

    /**

     * method getRecommendedObjectsListByCity

     *

     * @param city

     * @param offset the offset

     * @param limit the limit (NOTE: set to 0 for unlimited results)

     * @param filter the filter

     * @param order the order

     * @return RecommendedObjectsList the list of restaurants

     * @throws Exception, if an error occurs

     */

    @GET

    @Path(„de/{city}/restaurants“)

    public RecommendedObjectsList getRecommendedObjectsListByCity(

            @PathParam(„city“) String city,

            @QueryParam(„offset“) int offset, @QueryParam(„limit“) int limit,

            @QueryParam(„filter“) String filter,

            @QueryParam(„order“) String order) throws Exception {

        ArrayList<RecommendedObject> list = null;

        // get RecommendedObjects from Service

        List<RecommendedObject> recommendedObjects =

            webServiceFacade.getRecommendedObjectsByCity(city,

                offset, limit, new Filter(filter), new SortOrder(order));

        if (recommendedObjects != null) {

            list = new ArrayList<RecommendedObject>(recommendedObjects);

        }

        return new RecommendedObjectsList(list);

    }

    /**

     * check service availability

     *

     * @return current time

     * @throws Exception, if an error occurs

     */

    @GET

    @Path(„/ping“)

    @Produces(„text/plain“)

    @Consumes(„text/*“)

    public String ping() throws Exception {

        return „Pings at: “ + new Date();

    }

    // Getters and Setters

    /**

     * @param webServiceFacade the webServicefacade to be set

     */

    public void setWebServiceFacade(WebServiceBusinessFacade webServiceFacade) {

        this.webServiceFacade = webServiceFacade;

    }

}

Als gutes Nachschlagewerk zum Thema Webservices darf hier das Buch “Java Webservices“ von Friedrich Kiltz empfohlen werden. Man sieht an diesem Beispiel, wie leicht sich JBoss Packages in andere WebApplication Server (mit ihren Servlet Engines), wie hier den Tomcat 6, integrieren ließen. Nach demselben Prinzip lassen sich auch die Seam3 Extensions in den Tomcat bzw. innerhalb von “Weld“ integrieren und verwenden:

Basis-Konzept der JEE6 Specification: Das Prinzip der “Unified Managed Beans“


Jede von einem Container über ihren gesamten Lebenszyklus verwaltete Komponente kann also als eine annotierbare ManagedBean behandelt und verwendet werden. Dabei kommt es nur auf die richtigen Annotationen für die jeweilige Kategorie bzw. Familie einer Bean an. Folgende Beans sind dabei als ManagedBeans verwendbar: JavaBeans, EJBs, Spring Beans, JSF Managed Beans, Form Beans, Seam Beans und Guice Beans. Mit den entsprechenden Interceptors (@Interceptor), Lifecycle Callback Methoden und der Möglichkeit, andere Resourcen in die entsprechende Bean zu injecten (die neue Annotation für Injection heißt in Seam3 nicht mehr @In sondern @Inject) und eine existierende Bean in den Context zu injecten. Hierbei ist die CDI Injection in Seam3 Typ-basiert und dadurch ein Kombination aus Annotation, dem Typ und den Typ Parametern und basiert nicht mehr wie in Seam2 einfach auf String-Parametern. Dies ist am folgenden Beispiel mit dem Event Typ erkennbar. Die @ScopeType Annotation wird in Seam3 ersetzt durch die jeweilige Scope Annotation – @RequestScope, @SessionScope, @ApplicationScope oder den JSF @ConversationScope welcher mittels Conversation.start() und Conversation.end() den Anfang und das Ende einer Konversation markiert. Auf den Pseudo Scope @Dependent wird hier nicht näher eingegangen, stattdessen aber auf die Beispiele: 

Unified Bean Model – Die Annotationen

– Injection Annotation:

a) Event Producer:

@Inject

Event<Package> delivered;

public void delivery(String recipient) {

    java.util.Date date = new Date();

    delivered.fire(new Package(recipient, date));

}

b) Event Receiver:

@Inject

public void onDelivery(@Observes Package package, @Default Recipient recipient) {

    System.out.println(recipient + “ received “ + package.getContents());

}

CDI Beans sind also die neuen “Managed Beans”, wobei als neue Features “auto-discovery“ und die optionale Registrierung für dieses neue Feature für Beans in der beans.xml dazugekommen sind. Weiterhin sind mit der CDI Spezifikation verschiedene Bean Typen, sowie die Typ-basierte Injection und die Möglichkeit eine Bean Familie zu verwenden, hinzugekommen und auch “Qualifiers“ (@Qualifier, zur Design time festzulegen), “Alternatives“ (@Alternative, zur Deploy time festzulegen) und als WebServices Annotationen die “Producers“ (@Produces).

Hier ein paar simple Beispiele für diese Annotationen mit den wichtigen Webservices (@Produces) zu erst:

– Produces Annotation:

a) Methode:

Dies ist eine Methode mit der Möglichkeit der Bean-Generierung per Rückgabe-Typ der deklarierten Methode. Wenn in dem betreffenden Context noch keine Instanz dieser Bean existiert, instantiiert der Container bei Aufruf der Methode ein Bean-Objekt des deklarierten Rückgabetyps und injected die neue Bean zur Laufzeit in den Context.

@Produces

@Named

@Random

public int getRandomNumber() {

    return random.nextInt(100);

}

b) Attribut:

Dieses Attribut ist eine einfachere Alternative zur Producer Methode, welche die Referenz einer  existierenden JEE Komponente in den Context injectet (im Beispiel die Referenz auf einen Catalog- WebService).

@Produces

@WebServiceRef (lookup=“java:app/service/Catalog“)

Catalog catalog;

– Qualifier Annotation:

@Motocross

public class Motorcycle extends Vehicle implements Bike<Motorized> {

    […]

}

Diese Bean kann auf vier Arten Typ-basiert injected werden:

– als Typ der Klasse Motorcycle

– als Typ der Basisklasse Vehicle

– als Typ des implementierten Interfaces Bike<Motorized>

– als selbstdefinierte Annotation aus Qualifier/Name der Annotation: @Motocross mit folgender Definition

@Qualifier

@Retention(RUNTIME)

@Target ({TYPE, METHOD, FIELD})

public @interface Motocross { }

– Alternative Annotation:

Hiermit wird die Möglichkeit geschaffen, einen zur Laufzeit verfügbaren Alternativ Qualifier für einen bestimmten Annotation Typ zwecks expliziter Aktivierung zur Deploy time in der beans.xml einzutragen, die den Typ Qualifier des betroffenen Typs dann ersetzt:

@Alternative

@Motocross

public class TestBike extends Vehicle implements Bike<Motorized> {

    […]

}

– die beans.xml:

<alternatives>

    <class>org.jbossmotors.mock.TestBike

    </class>

</alternatives>

– Named Annotation:

Die Named Annotation macht jede hiermit annotierte ManagedBean per Unified Expression Language (EL) sofort für JSF und JSP Views verfügbar.

Vorteile beim Einsatz von Seam3

– Verschiedenste Resourcen können injected werden: Managed Beans, Web service references, Local oder Remote EJBs, Producer erzeugte Objekte, etc.

– Im Bereich Outjection und den in Seam2 mittels @Factory annotierten Methoden gibt es die Verbesserung der @Produces annotierten Methoden und deren einfacher erzeugten Objekten.

– Lose Kopplung bei gleichzeitig sauberer JEE6 Architektur: z.B. Entkopplung von (Event) Producer und Observer (Event Notification Empfänger)

-Seam3 ist modular erweiterbar auf Basis der JEE6 CDI Referenz-Implementierungen. Die Module (Extensions) haben einen voneinander unabhängigen Release-Zyklus (Snapshot/Package Releases).

-Der Seam Technologie Stack besteht aus der Java EE Integration auf der jeweiligen Referenz-Plattform, mit deklarativer Security, Page flows (jPDL) und Business Processes Management (jBPM), (JavaScript) remoting, Rendering verschiedenster Views wie E-mail, Grafiken, PDFs und .xls (Excel) Dateien, der Integration von Spring, Tools etc.

Dieser Artikel hat als Quelle Beispielcodes aus den SEAM Examples und Inhalte aus der offiziellen, frei verfügbaren JBOSS SEAM Dokumentation mit dem Titel “Seam – Contextual Components, A Framework for Enterprise Java 2.2.0.GA“ von den Autoren Gavin King, Christian Bauer et al als auch eigene Erfahrungen mit dem JBOSS SEAM Framework zur Grundlage, sowie zusätzliche Informationen aus dem genannten Buch und dem RedHat Artikel “Summit_JBW_2010_CDI.pdf“.

Kommentare

30 Kommentare zu “JBOSS SEAM – Von Seam2 nach Seam3 mit CDI und Weld”

  1. Von Services – REST, Hibernate, JSF mit JBoss 7 : binaris informatik GmbH am Sonntag, 27. Oktober 2013 15:08

    […] Zum Thema CDI gibt es bereits einen Eintrag in diesem Blog: JBOSS SEAM – Von Seam2 nach Seam3 mit CDI und Weld […]

  2. Von Services – mit jBPM6, JBoss, TDD : binaris informatik GmbH am Sonntag, 25. Mai 2014 23:17

    […] Dieser Blog-Eintrag basiert auf Beispielcodes aus den Open Source JBoss jBPM-Beispielen, die unter jboss.org erhältlich sind. Das hierbei verwendete Beispiel integriert sich durch den Einsatz von Context und Dependency Injection (CDI) gut mit Java EE6, was bekanntlich einige Vorteile hat. Es ist aber ebenso möglich, jBPM ohne die Verwendung von CDI und stattdessen mit simplen Java Konstructoren oder Factories zu verwenden. Zum Thema JBoss CDI und Weld gibt es bereits einen Blog-Eintrag in diesem Blog hier. […]

  3. Von Services – TDD mit Arquillian, JSF2, CDI, JEE6 : binaris informatik GmbH am Mittwoch, 29. April 2015 23:59

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im /WEB-INF […]

  4. Von Services – mit Angular JS, REST, JPA 2, JEE7, WildFly : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Donnerstag, 21. Mai 2015 00:21

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im /WEB-INF […]

  5. Von Services – mit REST, JPA 2, EJB 3.2, JSF 2.2, Angular JS : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Dienstag, 30. Juni 2015 19:09

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im /WEB-INF […]

  6. Von Services – mit REST, JPA 2, EJB 3.2, JSF 2.2, Angular JS, Bootstrap, JBoss Forge : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Donnerstag, 1. Oktober 2015 08:30

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  7. Von Services – mit REST, JPA 2, EJB 3.2, WebFrameworks, JBoss WildFly : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Samstag, 31. Oktober 2015 20:51

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  8. Von Services – mit Angular JS, REST, JPA 2, JEE7 auf JBoss WildFly 9 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 22. November 2015 19:15

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  9. Von Services – TDD mit Selenium, QUnit JS, JEE6 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Donnerstag, 10. Dezember 2015 09:20

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im /WEB-INF […]

  10. Von WebApps – mit REST, JPA 2, JSF 2, AngularJS, JEE6, JEE7 auf JBoss WildFly 9 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 13. Dezember 2015 21:59

    […] verwenden unter der Haube CDI, worüber es bereits Blog-Einträge in diesem Blog gibt hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  11. Von WebApps – mit REST, JPA 2, EJB 3.2, Angular JS, JSF 2.2 auf JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 31. Januar 2016 12:40

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  12. Von WebApps – mit JSF 2.2, Primefaces 5, REST, JPA 2, JEE7, JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 28. Februar 2016 19:44

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  13. Von WebApps – Migration von JSF 2.2 MyFaces, RichFaces zu Primefaces, REST, JPA 2, JEE7 auf JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 27. März 2016 23:13

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  14. Von WebApps – Migration mit JSF 2.2 Primefaces, REST, JPA 2, JEE7 auf JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 1. Mai 2016 12:37

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  15. Von WebApps – vom Modell zur App, mit JSF 2.2, Angular JS, REST, JPA 2, JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Montag, 30. Mai 2016 21:45

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  16. Von WebApps – Responsiv mit Angular JS, REST, JEE7, Java 8 auf JBoss WildFly 9 und 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Donnerstag, 30. Juni 2016 23:17

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  17. Von WebApps – Primefaces 6, REST, JEE7, Angular JS auf JBoss WildFly 9 und 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 24. Juli 2016 09:02

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  18. Von WebApps – mit Angular JS, REST, JEE7, JBoss Forge, Java 8, MySQL 5, Postgres 9, MSSQL Server 2016 auf JBoss WildFly 9 und 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Freitag, 19. August 2016 21:27

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  19. Von WebApps – mit JPA 2, JSF 2.2, Primefaces 6, REST, JEE7, Java 8 auf JBoss WildFly 9 und WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 25. September 2016 22:33

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  20. Von WebApps – mit Angular JS, JQuery, REST, JEE7, Java 8, MySQL 5, Postgres 9, auf JBoss WildFly : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 30. Oktober 2016 00:42

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  21. Von WebApps – mit JSF 2, Primefaces 6, REST, JPA 2, EJB 3, JEE7, Java 8 auf JBoss WildFly : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 27. November 2016 18:49

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  22. Von WebApps – Generativ mit Angular JS, REST, JEE7, Java 8 auf JBoss WildFly 9 und 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Freitag, 13. Januar 2017 22:01

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  23. Von WebApps – JSF 2, RichFaces 4, Primefaces 6, REST, JPA 2, EJB 3, JEE7, JBoss WildFly : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Samstag, 28. Januar 2017 12:19

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  24. Von WebApps – Primefaces 6, FileUploads, JSF 2, JPA 2, EJB 3, JEE7, REST, AngularJS, WildFly : Karriere als Software Entwickler | binaris informatik GmbH am Mittwoch, 22. Februar 2017 16:03

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  25. Von WebApps – JSF 2, Primefaces, FileDownloads, JPA 2, EJB 3, JEE7, REST, MySQL, WildFly : Karriere als Software Entwickler | binaris informatik GmbH am Sonntag, 26. März 2017 19:52

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  26. Von WebApps – Primefaces 6, JPA 2, EJB 3, PDFs parsen, iText, MySQL, REST, JEE7, WildFly : Karriere als Software Entwickler | binaris informatik GmbH am Sonntag, 23. April 2017 15:21

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  27. Von WebApps – mit Angular JS, JQuery, REST, JEE7, JBoss Forge, Java 8, MySQL 5, auf JBoss WildFly 9 und 10 : Karriere als Software Entwickler | binaris informatik GmbH am Sonntag, 28. Mai 2017 16:16

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  28. Von WebApps – Wizards mit Primefaces 6, JSF 2, JPA 2, EJB 3, JEE7, Postgres 9, REST, WildFly 9 und 10 : Karriere als Software Entwickler | binaris informatik GmbH am Donnerstag, 29. Juni 2017 17:03

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  29. Von WebApps – mit Primefaces 6, JSF 2, JPA 2, EJB 3, JEE7, REST auf WildFly 9, 10 und 11 : Karriere als Software Entwickler | binaris informatik GmbH am Samstag, 30. September 2017 19:18

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

  30. Von WebApps – RESTful mit JSF 2, JPA 2, EJB 3, Primefaces 6, JEE7, Java 8 und 9 auf WildFly 9, 10 und 11 : Karriere als Software Entwickler | binaris informatik GmbH am Mittwoch, 1. November 2017 13:00

    […] CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF […]

Einen Kommentar hinzufügen...

Sie müssen registriert und angemeldet sein um einen Kommentar zu schreiben.