Komplexe WebServices in PHP mit dem Zend Framework aufrufen

Hallo zusammen, hier mal wieder ein kurzes Tutorial über die Verwendung von WebServices in PHP mit dem Zend Framework. Dieses Tutorial ist darauf angelegt komplexe Typen richtig als Eingabeparameter anzugeben und abstrakte Klassen über SoapVar richtig zu definieren.

In dem Tutorial erstellen wir einen kleinen WebService in Java und sprechen diesen dann über PHP an.

Ich hoffe es hilft dem ein oder anderen. Über Feedback freue ich mich wie immer!

Download (Source + Tutorial) ([downloadcounter(PHPWebServiceWithZend.zip)]x heruntergeladen)

Download (Tutorial) ([downloadcounter(PHPWebServiceWithZend.pdf)]x heruntergeladen)

Was ist neu in Java EE 6?

Alle großen Unternehmen (IBM, Oracle, SAP, …) lassen ihre Application Server nach der Java EE 6 Spezifikation zertifizieren. Aber was bringt Java EE 6 eigentlich mit sich? Hier eine kurze Auflistung:

  • Servlet-Konfiguration über Annotations:
    @WebServlet(name="MySevlet", urlPatterns={"/jofre/MyServlet"})
    public class MyServlet extends HTTPServlet { ... }
  • JSF 2.0 Konfiguration über Annotations:
    @ManagedBean(name = "jofreBean")
    @SessionScoped
    public class JofreBean { ... }
  • EJB 3.1 Singletons (Eine Bean pro JVM):
    @Singleton
    public class MySingletonBean { ... }
  • EJB 3.1 Timer (EJB-Aufrufe pro Zeit):
    @Stateless
    public class TimerEJB {
    	@Schule(dayOfWeek="Mon")
    	public void ItIsMonday(Timer timer) { ... }
    }
  • EJB 3.1 Asynchrone Session-Bean-Methoden:
    @Stateless
    public class MyBean {
     
    	@Asynchronous
    	public void browseData();
    }
  • JPA 2.0 Abbilden von Collections:
    @Entity
    public class Person
    {
    	@ElementCollection
    	private Set firstNames;
    }

Das sind natürlich nur einige wenige Neuerungen aber das macht natürlich Lust auf mehr 🙂 Folgende Server unterstützen Java EE 6:

  • IBM WebSphere Application Server 8
  • Sun/Oracle GlassFish
  • Tomcat 7 (Beta)

IBM BPM 7.5 – Rest Services Übersicht

Heut mal wieder ein etwas spezielleres Thema, aber da ich weiß, dass es für viele Kollegen in Zukunft interessant wird möchte ich dieses kleine aber feine Stückchen Wissen mit euch teilen!

IBM hat ein neues Paket geschnürt aus dem WebSphere Process Server und der WebSphere Lombardi Edition zu einem in 3 Pakete gestaffelten Produkt dem Business Process Manager 7.5. Für alle Entwickler die sich mit dem Thema Mobile (Android, IPhone, Blackberry, HTML5, …) auseinandersetzen ist sicherlich interessant, dass die REST API erheblich verbessert wurde und zwischen Lombardi und dem Process Server vereinheitlicht werden soll.

Da ich gerade ein bisschen mit dem BPM rumexperimentiere, speziell mit der REST API, habe ich eine Übersicht über alle REST Urls gesucht, aber natürlich keine gefunden 🙂 Dafür gibt es etwas noch viel besseres, man muss allerdings erstmal darauf stoßen:

http://host_name:port_number/bpmrest-ui

Über diese URL gelangt man auf eine Testseite über die man sich alle möglichen REST Requests anzeigen lassen kann die der BPM anbietet. Ganz toll auch diesmal: Einen Health Check!

Viel Spaß beim Ausprobieren!

JavaEE Entwicklungsumgebung aufsetzen mit WebSphere Community Edition

Hallo zusammen, seit einiger Zeit versuche ich mich an Videotutorials da ich von den Video2Brain CDs total begeistert bin. Hier stelle ich heute mein erstes Video vor mit dem wunderbaren Titel: “JavaEE Entwicklungsumgebung mit WebSphere Community Edition und Eclipse einrichten”.

Darin beschreibe ich wie man eine simple Entwicklungsumgebung zum lokalen Erstellen von Geschäftsanwendungen aufbaut. Diese soll als Basis für kommende Tutorials dienen. Geplant sind für nächste Zeit die Themen:

  • WebServices
  • REST Services
  • JSP
  • JSF
  • EJB
  • Spring
  • Hibernate

Edit: Java EE 6 ist toller neuer interessanter, deswegen werde ich die Tutorials nicht weiter auf dem WAS CE (Java EE 5) entwickeln sondern auf GlassFish umsteigen.

Genug versprochen, hier kommt das Video:

Eintrag x bis y aus einer Tabelle zurückgeben

Ich stand neulich vor dem Problem ein begrenzes Resultset zu benötigen, das genau Eintrag x bis y aus der Tabelle einer Datenbank (DB2) beinhaltet.

Vor dieser Herausforderung stehen mit Sicherheit viele Entwickler die sich mit Suchabfragen, Foreneinträgen oder Artikelauflistungen beschäftigen. Nämlich genau immer dann, wenn es darum geht ein Paging zu implementieren in dem nicht alle Ergebnisse auf einmal, sodern gestaffelnt nach n Einträgen angezeigt werden sollen. Aber wie formuliere ich dazu ein Statement? Eine nette Kollegin konnte helfen:

with temp as (
select Name,
       Vorname,
       Alter,
       rownumber() over (order by Alter) as row
from Tabelle
)
select Name, Vormane, Alter
from temp
where row between 100 and 200;

Wir hängen also nur eine weitere Spalte an unser Resultset dran (row) und füllen diese über die vordefinierte Funktion “rownumber()”. Dadurch wird “row” durchnummeriert und wir können einfach Eintrag 100 – 200 abfragen.

Timeout für Jax-RPC WebService festlegen

Es gibt Fragen im Internet auf die es keine Antwort zu geben scheint es sei denn man stolpert glücklicherweise über selbige. Genau das ist mir heute passiert und damit es euch nicht ebenso geht, landet die Antwort natürlich direkt hier im Blog 🙂

Problem: Ihr wollt über JAX-RPC einen WebService aufrufen. Dieser ist nicht erreichbar und euer aufrufender Client dümpelt vor sich hin und arbeitet nicht weiter.

Ansatz: Man setzt einen Timeout den der aufrufende Client auf den WebService wartet.

Lösung: So unbekannt und doch so einfach:

HelloWorldServiceLocator hwsl = new HelloWorldServiceLocator();
HelloWorld hw = hwsl.getHelloWorld();
((Stub) hw).setTimeout(60000);
hw.sayHello();

Man ruft also den WebService über einen herkömmlichen WebService-Client auf (Dieser lässt sich in jeder guten IDE generieren) und castet das Service-Objekt auf ein Stub. Hier kann man nun einen Timeout in Millisekunden setzen. So einfach ist das!

Eine EJB aus einer Clientanwendung aufrufen

Enterprise Java Beans (EJB) sind für viele der Enterpriseanwendungsentwickler heutzutage nicht mehr wegzudenken. Wie es nun aber mal bei Java ist, kursieren im Internet 1000 Fragen auf eine Erklärung. Um die magere Quote von 1000:1 ein bisschen aufzuwerten möchte ich hier eine kurze Anleitung schreiben, wie man aus einer Client-Anwendung eine EJB auf einem Anwendungsserver auffindig macht um dann eine Methode daraus aufzurufen.

Schritt 1: Finde die Bohne und führe Methode aus

Eine EJB über das Java Naming and Directory Interface (JNDI) zu finden ist kein Hexenwerk. Das Aufrufen ist ebenso simpel. Bitte beachten, dass hier keine Exceptions gefangen werden!

public void callMyMethodFromEJB() {
Object object = null;
MyEJBHome ejbHome = null;
InitialContext ic = new InitialContext();
object = ic.lookup("/ejb/de/jofre/MyEJBHome");
ejbHome = (MyEJBHome) PortableRemoteObject.narrow(object, MyEJBHome.class);
MyEJBRemote ejbRemote = ejbHome.create();
ejbRemote.myMethod();
}

Continue reading “Eine EJB aus einer Clientanwendung aufrufen”