menembus batas impian


Dulu, kita sudah mencoba untuk membuat remoting service dengan menggunakan Spring Framework. Salah satu protokol yang digunakan adalah Spring HTTP Invoker. Untuk mempublish service dengan protokol ini, kita harus menggunakan servlet engine, misalnya Tomcat.

Akan tetapi, Sun Microsystem merilis Java versi 6 yang sudah dilengkapi dengan HTTP Server sederhana. Dengan memanfaatkan fitur ini, kita tidak perlu lagi menggunakan Tomcat hanya untuk mempublish service dengan HTTP Invoker. Ini akan sangat bermanfaat untuk aplikasi kecil yang ingin dipanggil oleh aplikasi lain.

Pada artikel ini, kita akan mempublish service dengan protokol HTTP Invoker pada HTTP Server yang disediakan oleh Sun JRE versi 6.

Di Netbeans, kita akan membuat tiga project, yaitu

  • remoting-shared : project ini menampung interface RemotingService, yang akan digunakan di client dan server
  • remoting-server : project ini yang akan mempublish service. Implementasi RemotingService juga ada di sini
  • remoting-client : project ini yang akan mengakses service yang dipublish remoting-server

Berikut screenshot Netbeans. Project remoting-server dan remoting-client memiliki dependensi terhadap remoting-shared.

Pertama, mari kita lihat dulu service interfacenya. Berikut adalah kode programnya.

  1. package com.artivisi.tutorial.remoting.spring.service.api;
  2. public interface RemotingService {
  3.     public String halo(String nama);
  4. }

Kode program ini berada di project remoting-shared.

Berikutnya, kita lihat dulu di sisi client. Kita cuma butuh satu class untuk menjalankan aplikasi, yaitu ClientLauncher sebagai berikut.

  1. package com.artivisi.tutorial.remoting.spring.client;
  2. public class ClientLauncher {
  3.     private static final Logger log = Logger.getLogger(ClientLauncher.class.getName());
  4.     public static void main(String[] args) {
  5.         AbstractApplicationContext ctx =
  6.                 new ClassPathXmlApplicationContext(“client-ctx.xml”, ClientLauncher.class);
  7.         ctx.registerShutdownHook();
  8.         RemotingService service = (RemotingService) ctx.getBean(“remotingService”);
  9.         String msg = service.halo(“endy”);
  10.         log.info(“Pesan dari server : “+msg);
  11.     }
  12. }

ClientLauncher akan membaca client-ctx.xml yang isinya seperti ini.

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <beans xmlns=”http://www.springframework.org/schema/beans&#8221;
  3.        xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
  4.        xsi:schemaLocation=”
  5. http://www.springframework.org/schema/beans
  6.        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd”>
  7.     <!–  proxy dengan protokol HTTP Invoker  –>
  8.     <bean id=”remotingService”
  9.     class=”org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean”>
  10.          <property name=”serviceUrl”
  11.          value=”http://localhost:9090/RemotingService”/&gt;
  12.          <property name=”serviceInterface”
  13.          value=”com.artivisi.tutorial.remoting.spring.service.api.RemotingService”/>
  14.     </bean>
  15. </beans>

Seperti kita lihat di atas, client mengakses service yang ada di komputer lokal (localhost) di port 9090, dengan nama service RemotingService.

Selanjutnya, mari kita implement project remoting-server. Di sini ada implementasi RemotingService sebagai berikut

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package com.artivisi.tutorial.remoting.spring.service.impl;
  6. @Service(“remotingService”)
  7. public class RemotingServiceImpl implements RemotingService {
  8.     Logger log = Logger.getLogger(RemotingServiceImpl.class.getName());
  9.     public String halo(String nama) {
  10.         log.info(“Terima dari client : “+nama);
  11.         return “Halo, “+nama;
  12.     }
  13. }

Kemudian ada class untuk menjalankan aplikasi di sisi server. Berikut ServerLauncher.

  1. package com.artivisi.tutorial.remoting.spring.server;
  2. public class ServerLauncher {
  3.     public static void main(String[] args) {
  4.         AbstractApplicationContext ctx =
  5.                 new ClassPathXmlApplicationContext(“server-ctx.xml”, ServerLauncher.class);
  6.         ctx.registerShutdownHook();
  7.     }
  8. }

ServerLauncher membaca file konfigurasi server-ctx.xml. Inilah isinya.

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <beans xmlns=”http://www.springframework.org/schema/beans&#8221;
  3.        xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
  4.        xmlns:p=”http://www.springframework.org/schema/p&#8221;
  5.        xmlns:context=”http://www.springframework.org/schema/context&#8221;
  6.        xsi:schemaLocation=”
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  9. http://www.springframework.org/schema/context
  10.        http://www.springframework.org/schema/context/spring-context-2.5.xsd”>
  11.     <!– menginstankan Sun HttpServer dalam JRE 6 –>
  12.     <bean class=”org.springframework.remoting.support.SimpleHttpServerFactoryBean”>
  13.         <property name=”contexts”>
  14.             <map>
  15.                 <entry key=”/RemotingService” value-ref=”remotingServiceHttpInvoker”/>
  16.             </map>
  17.         </property>
  18.         <property name=”port” value=”9090″ />
  19.     </bean>
  20. </beans>

Pada blok konfigurasi pertama, kita menginstankan Sun HttpServer yang ada di JRE 6. HttpServer ini akan berjalan di port 9090, sesuai dengan yang kita konfigurasi di sisi client. Di sana terlihat bahwa URL /RemotingService akan ditangani oleh remotingServiceHttpInvoker. Berikut konfigurasinya

  1. <!–  publish service dengan protokol HttpInvoker  –>
  2. <bean id=”remotingServiceHttpInvoker”
  3.       class=”org.springframework.remoting.httpinvoker.SimpleHttpInvokerServiceExporter”
  4.       p:service-ref=”remotingService”
  5.       p:serviceInterface=”com.artivisi.tutorial.remoting.spring.service.api.RemotingService”
  6.  />

Selanjutnya, kita suruh Spring mendeteksi implementasi service kita secara otomatis, yaitu class yang ada anotasi @Service.

  1. <context:component-scan base-package=”com.artivisi”/>

Berikut adalah dependensi pustaka di project client.

Library untuk Project ClientLibrary untuk Project Client

Dan ini untuk di server.

Library untuk Project ServerLibrary untuk Project Server

Keseluruhan project akan terlihat seperti ini.

Struktur Folder semua ProjectStruktur Folder semua Project

Semua library dapat diambil dari distribusi Spring Framework dan Repository SpringSource.

Coba jalankan ServerLauncher, kita akan melihat log seperti ini.

  1. Jul 3, 2009 2:57:25 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
  2. INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@be2358: display name [org.springframework.context.support.ClassPathXmlApplicationContext@be2358]; startup date [Fri Jul 03 14:57:25 WIT 2009]; root of context hierarchy
  3. Jul 3, 2009 2:57:26 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. INFO: Loading XML bean definitions from class path resource [server-ctx.xml]
  5. Jul 3, 2009 2:57:26 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
  6. INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@be2358]: org.springframework.beans.factory.support.DefaultListableBeanFactory@f11404
  7. Jul 3, 2009 2:57:26 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
  8. INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@f11404: defining beans [org.springframework.remoting.support.SimpleHttpServerFactoryBean#0,remotingServiceHttpInvoker,remotingService,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor]; root of factory hierarchy
  9. Jul 3, 2009 2:57:27 PM org.springframework.remoting.support.SimpleHttpServerFactoryBean afterPropertiesSet
  10. INFO: Starting HttpServer at address 0.0.0.0/0.0.0.0:9090

Lalu jalankan ClientLauncher, inilah log yang muncul.

  1. Jul 3, 2009 2:58:12 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
  2. INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@be2358: display name [org.springframework.context.support.ClassPathXmlApplicationContext@be2358]; startup date [Fri Jul 03 14:58:12 WIT 2009]; root of context hierarchy
  3. Jul 3, 2009 2:58:12 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. INFO: Loading XML bean definitions from class path resource [client-ctx.xml]
  5. Jul 3, 2009 2:58:13 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
  6. INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@be2358]: org.springframework.beans.factory.support.DefaultListableBeanFactory@d2906a
  7. Jul 3, 2009 2:58:13 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
  8. INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@d2906a: defining beans [remotingService]; root of factory hierarchy
  9. Jul 3, 2009 2:58:13 PM com.artivisi.tutorial.remoting.spring.client.ClientLauncher main
  10. INFO: Pesan dari server : Halo, endy

Setelah ClientLauncher dijalankan, di log server akan muncul informasi sebagai berikut.

  1. INFO: Terima dari client : endy

Demikianlah cara menggunakan embedded HttpServer. Selamat mencoba.

full Copy paste dari bang endy ; http://endy.artivisi.com/blog/java/spring-httpinvoker-sun-jre6-httpserver/

maaf mumpung bisa di akses blog nya krn beberapa hari akses blog aban ga bisa, setelah bisa ya langkah aman copy paste he he

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: