English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تكامل Spring مع RMI

Spring RMI يتيح لك إطلاق الخدمات عبر بنية تحتية RMI.

يستخدم Spring org.springframework.remoting.rmi. RmiProxyFactoryBean وorg.springframework.remoting.rmi. RmiServiceExporter فئة.

RmiServiceExporter

إنه يقدم خدمة تصدير لجسم RMI. يمكن الوصول إلى هذه الخدمة من خلال RMI العادي أو من خلال مصنع بروتوكول RMI.

RmiProxyFactoryBean

إنه مصنع بروتوكول RMI. إنه ي公开 خدمة بروتوكول يمكن استخدامها كمرجع للbean.

مثال على تكامل Spring و RMI

نحن سنجرب خطوات بسيطة لتكامل تطبيق Spring مع RMI:

Calculation.java CalculationImpl.java applicationContext.xml client-beans.xml Host.java Client.java


ملفات jar الضرورية

للبدء في هذا المثال، يجب عليك تحميل:

ملف jar الخاص بـ Spring Core ملف jar الخاص بـ Spring Remoting ملف jar الخاص بـ Spring AOP

انقر لتحميل جميع ملفات jar الخاصة بـ spring، بما في ذلك core، web، aop، mvc، j2ee، remoting، oxm، jdbc، orm وما إلى ذلك.


1. Calculation.java

هذه واجهة بسيطة تحتوي على طريقة لمجموعة بيانات متعددة.

package com.w3codebox;
public interface Calculation {
int cube(int number);
}

2. CalculationImpl.java

يقدم هذا الصنف تنفيذًا للواجهة Calculation.

package com.w3codebox;
public class CalculationImpl implements Calculation{
    @Override
    public int cube(int number) {
        return number*number*number;
    }
}

3. applicationContext.xml

في هذا ملف xml، نقدم CalculationImpl الصنف و RmiServiceExporter يحدد هذا الصنف bean. يجب تقديم قيم للصفات التالية لصنف RmiServiceExporter.

خدمة serviceInterface serviceName replaceExistingBinding registryPort

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="calculationBean" class="com.w3codebox.CalculationImpl"></bean>
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
    <property name="service" ref="calculationBean"></property>
    <property name="serviceInterface" value="com.w3codebox.Calculation"></property>
    <property name="serviceName" value="CalculationService"></property>
    <property name="replaceExistingBinding" value="true"></property>
    <property name="registryPort" value="1099"></property>
</bean>
</beans>

4、client-beans.xml

في هذا ملف xml، نحن نتعرف على RmiProxyFactoryBean تم تعريف bean. تحتاج إلى تعريف هذين الميزتين للفئة.

serviceUrl serviceInterface

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">
    
<bean id="calculationBean" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:1099/CalculationService"></property>
<property name="serviceInterface" value="com.w3codebox.Calculation"></property>
</bean>
</beans>

5、Host.java

هذا هو مجرد الحصول على مثال ApplicationContext. ولكن يجب عليك تشغيل هذا الكائن أولاً لتشغيل المثال.

package com.w3codebox;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Host{
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("Waiting for requests");
}
}

6،Client.java

يحصل هذا الكائن على مثال Calculation ويقوم بتشغيل هذا الطريقة.

package com.w3codebox;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("client-beans.xml");
Calculation calculation = (Calculation)context.getBean("calculationBean");
System.out.println(calculation.cube(7));
}
}