Implement, deploy and call an EJB 3.0 webservice using Glassfish and JAX-WS

来源:互联网 发布:centos 7安装kvm 编辑:程序博客网 时间:2024/05/29 04:04

Playing around with EJB3.0 for a while, I decided to try the special webservice annotations set of EJB3.0 for deploying an EJB as a webservice.Looking at the documentation, I discovered that that this feature is based on the new Java XML webservice API called JAX-WS (JSR-224), which is in real JAX-RPC 2.0. I decided to build a EJB3.0 with special webservice methods in JDeveloper and deploy it on the Glassfish application server. Next, I developed a client for the webservice in Netbeans 5.0 using JAX-WS. I could have used JDeveloper for building the client, but I used Netbeans 5.0 for just trying a different IDE then the one I’m daily using ;) .

I chose JDeveloper 10.1.3 for developing the EJB3.0 webservice, because it has, as one of the few IDEs , build-in support for EJB3.0 development. The code below shows the stateless session bean with a single webservice method that returns a message.

@Stateless@WebService(serviceName = "MyFirstEJB3Service")public class WebserviceEJBBean implements WebserviceEJB {    public WebserviceEJBBean() {    }        @WebMethod(operationName="HelloWorld")    public String getHelloMessage(String s)  {        return "Hello " + s + "/n" +"This is my first EJB3.0 webservice developed in JDeveloper and deployed on the glassfish platform";       }    }

After you have generated a jar file for your EJB module, you login into the administration console of your Glassfish installation and deploy the jar file as an EJB module in the console (Applications -> EJB modules). After successfully deployed the module, you can test your webservice in the console (Webservices -> WebserviceEJBBean )

Ok, now we have implemented and deployed an EJB3.0 webservice on the Glassfish application server. It’s now time to make a client that consumes the webservice. Start your Netbeans 5.0 installation and make a new basic application project. Now you have to download the JAX-WS API binaries to you local drive and add them a s a library to your project. Now we have to generate artifacts to make the actual webservice call. JAX-WS contains a tool, called wsimport, to generate artifacts from a given WSDL file. You can integrate this tool as an ANT-task in your build file by inserting the following code in your project build file:

<!-- Overrides -pre-compile target          java artifacts that will created and compiled to build/classes directory. -->    <target name="-pre-compile">        <mkdir dir="build/classes"/>        <taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">            <classpath path="${javac.classpath}"/>        </taskdef>        <echo>running wsimport</echo>        <wsimport            debug="true"            keep="true"            destdir="build/classes"            package="wsimport.generated.myfirstejbws"            wsdl="http://localhost:8080/MyFirstEJB3Service/WebserviceEJBBean?WSDL"/>    </target>

Finally, add the following code to the main method of the application’s main class and run the application to see the message returned by the webservice.

/**     * @param args the command line arguments     */    public static void main(String[] args) {        System.out.println("Response from the webservice: "+"/n"+Main.testService());    }        public static String testService(){        //Use the generared artifacts to make the webservice invocation.        MyFirstEJB3Service service = new MyFirstEJB3Service();        WebserviceEJBBean proxy = service.getWebserviceEJBBeanPort();                return proxy.helloWorld("Tom Hofte");    }

I think with JAX-WS developing webservices and building clients for thembecomes really easy by using annotation and the supplied tools likewsimport. Sun has done a great job with this new standard XMLwebservice API!