ความต้องการพื้นฐานของระบบพรีเซนเตชั่นเทียร์กับแอพพลิเคชั่นเทียร์ต้องแยกกันโดยเด็ดขาดหรืออยู่คนละเครื่องเท่านั้น ทำไงดี?
คำตอบที่ง่ายที่สุดตอนนี้คือใช้สปริงรีโมทติ้งนั่นเอง(ถ้าเอาแบบสุดต้องโอเอสจีไอ) สำหรับสปริงรีโมทติ้งนั้นเราสามารถเลือกใช้งานได้ไหลายแบบด้วยกันดังนี้ Remote Method Invocation (RMI).Spring’s HTTP invoker.Hessian.Burlap. JAX-RPC. JAX-WS. JMS. แล้วแบบไหนดีล่ะที่ดูแล้วซิมเปิ้ลแต่ทรงพลังที่สุดแน่นอนคำตอบคืออาร์เอ็มไอของเราเหมือนเดิม ดังนั้นเราจะลองใช้บริการอาร์เอ็มไอกัน

จากรูปเราจะแบ่งแอพพลิเคชั่นออกเป็นสองส่วนคือ “helloWorldService” ฝั่งเซิร์ฟเวอร์โดยที่ผั่งเซิร์ฟเวอร์ในจังหวะที่เราต้องการประกาศบีนนั้นต้องทำการเปลี่ยนแปลงการเขียนคอนฟิกกูเรชั่นเล็กน้อยโดยต้องบอกว่าเราจะให้เซอร์วิสนี้ถูกเรียกใช้งานได้ผ่าน อาร์เอ็มไอ แต่ก่อนอื่นเรามาดูเซอร์วิสอินเทอร์เฟสและอิมพลีเมนท์คลาสก่อน
public interface HelloWorld {
public String getMessage();
}
โดยที่อินเทอร์เฟสคลาสนี้จะต้องถูกใส่ไว้ทั้งที่ฝั่งไคล์แอนท์และเซิร์ฟเวอร์ ต่อไปเรามาดูอิมพลีเมนท์เตชั่นคลาสกัน
public class SimpleHelloWorld implements HelloWorld {
public String getMessage() {
return "Hello World";
}
}
เมื่อเรามีเซอร์วิสแล้วเราต้องทำการสร้างคอนฟิกกูเรชั่นโดยเราจะตั้งชื่อว่า helloWorld.xml ดดยมีรายละเอียดดังนี้
<bean id="helloWorldService" class="com.spring66.remoting.rmi.SimpleHelloWorld"/>
<bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="HelloWorld" />
<property name="service" ref="helloWorldService" />
<property name="serviceInterface" value="com.spring66.remoting.rmi.HelloWorld" />
<property name="registryPort" value="9000" />
<property name="servicePort" value="9001" />
</bean>
คอนฟิกกูเรชั่นไฟล์นี้จะบอกสปริงว่าเซอร์วิสที่ชื่อ “helloWorldService” นั้นจะถูกเอ็กซ์พอร์ทไปเป็นรีโมททิ่งเซอร์วิสผ่านอาร์เอ็มไอเซอร์วิสเอ็กพอร์ทเทอร์ โดยชื่อที่เราจะใช้อ้างถึงคือ “HelloWorld” ส่วนเซอร์วิสจริงนั้นจะเป็นบีนชื่อ “helloWorldService” และทั้งสองฝั่งจะใช้อินเทอร์เฟสร่วมกัน “com.spring66.remoting.rmi.HelloWorld” และพอร์ทที่เราจะใช้สื่อสารคือพอร์ทหมายเลย 9000
หลังจากได้ผั่งเซิร์ฟเวอร์แล้วเราจะมาเขียนฝั่งไคล์แอนท์กัน
โดยที่ฝั่งไคล์แอนท์นั้นเราก็คิดเสมอนว่าเรามีบีนอยู่แล้วเพียงแต่สิ่งที่เรามีนั้นมีแต่อินเทอร์เฟสคลาสเท่านั้น เพราะตัวจริงเราจะใช้พลังดูดดาวดึงมาจากที่อื่นผ่านอาร์เอ็มไอแทนดังนั้นสิ่งที่เปลี่ยนไปคือคอนฟิกกูเรชั่นไฟล์เท่านั้นเองโดยเรามาดูกันเลย
<bean id="helloWorldService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:9000/HelloWorld" />
<property name="serviceInterface" value="com.spring66.remoting.rmi.HelloWorld"/>
</bean>
<bean id="helloWorldClient" class="com.spring66.remoting.rmi.HelloWorldClient">
<property name="helloWorldService" ref="helloWorldService" />
</bean>
ส่วนโค้ดก็เหมือนเดิมไม่มีอะไรเปลี่ยนแปลงทุกอย่างเดมือนเคย จะเห็นได้ว่าวิธีนี้เป็นทางออกที่ดีมากสำหรับการแก้ปัญหาเรื่องของการแยก เทียร์ ของการแสดงผลออกจากการคำนวณแบบจริงๆตามข้อกำหนดของบางบริษัท
