サービスコールRMIリモートメソッドコール例【Springプロファイルベース】


文句を言うのはテーマとは関係ありません.
前編のブログでは、RMIリモートメソッド呼び出しの例を分析し、例を通して、実際には、呼び出されるとサービスが宣言され、サービス側と呼ばれ、自動呼び出しはサービスが呼び出され、クライアントと呼ばれていることをまとめることができます.
         
リモートコールである以上、サーバ側は、Webサービスなどのサービスオブジェクトを見つけることができるように、宣言されたラベルを供給し、サービス側はwsdlアドレスとして宣言し、クライアントはwsdlを通じてこのサービスオブジェクトを見つけることができます.サーバがサービスタグを宣言すると、クライアントはそれに従うだけです.
したがって,分散呼び出しをどのような方法で実現しても,どのようなプロトコルを使用しても,基本的な歩調や基本的な考え方は通じる.
    
前のブログでは、通常のjavaプロジェクトを使用して、サービスを発表または呼び出します.ハードコーディングという方法は,いったん変更すると再コンパイル配置が必要であるが,xmlホット配置ほど速くないことも知られている.
このブログではspringを使用してrmiが発表したアドレスや発表したクラスなどのサービス構成情報を管理します.
    
サービス:
インタフェース部分:【一般インタフェース】
    
package com.rmi.server;



import com.entity.Person;



public interface Server {



	String helloWorld(String name);



	Person getPerson(String name, int age) ;

}

実現部分:【普通実現】
    
package com.rmi.server;



import com.entity.Person;



// , UnicastRemoteObject, 

public class ServerImpl implements Server {





	@Override

	public String helloWorld(String name) {

		// TODO Auto-generated method stub

		return name + ",helloworld";

	}



	@Override

	public Person getPerson(String name, int age){

		// TODO Auto-generated method stub

		return new Person(name, age);

	}



}

エンティティ・クラスが渡される場合は、シーケンス化が必要です.
    
package com.entity;



import java.io.Serializable;



public class Person implements Serializable {

	/**

	 * 

	 */

	private static final long serialVersionUID = 1L;



	public String getName() {

		return name;

	}



	public void setName(String name) {

		this.name = name;

	}



	public int getAge() {

		return age;

	}



	public void setAge(int age) {

		this.age = age;

	}



	private String name;

	private int age;



	//  

	public Person() {

	}



	//  

	public Person(String name, int age) {

		this.name = name;

		this.age = age;

	}

}

サービス側springプロファイル:応答するコメント
    
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"

	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">



<bean id="testSpringRMI" class="com.rmi.server.ServerImpl"/>



<!--     rmi  -->

<bean id="rmiServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">

  <!--  service -->

  <property name="service" ref="testSpringRMI"></property>

  <!--  serviceName -->

  <property name="serviceName" value="testrmiSpring"/>

  <!--   -->

  <property name="serviceInterface" value="com.rmi.server.Server"/>

  

  <!--  , 1099 -->

  <property name="registryPort" value="1099"/>



</bean>



</beans>

毎日同じ理屈
「上下五千年、龍の見る火は滅びない.昔は愚公の志があったが、今は最初から越えて......」新世紀の敷居に立って、私たちの追求は祖国の輝かしい喜びを美しい明日に飛ばすことだ.
プロファイルを手動でロードするのではなく、サーバを使用して起動します.xml
    
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

	id="WebApp_ID" version="2.5">

	<display-name>rmiTestServerSpring</display-name>



	<context-param>

		<param-name>contextConfigLocation</param-name>

		<param-value>classpath:com/config/applicationContext-*.xml</param-value>

	</context-param>

	<listener>

		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

	</listener>

</web-app>

 
OK、サーバが起動すると、プロファイルを読み取り、サービスを宣言できます.
最初のブログでmainメソッドにポートを登録したり、jndi名や応答を宣言したりするクラスは必要ありません.
        
クライアントはspringファイルを使用します.
    
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"

	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">







<!--      rmi -->

<bean id="testrmiSpring" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">

  <!-- url serviceName -->

  <property name="serviceUrl" value="rmi://:1099/testrmiSpring"/>

  <!--   -->

 <property name="serviceInterface" value="com.rmi.server.Server"/>



</bean>



</beans>

デルのクライアントは、Webプロジェクトではなくjavaプロジェクトを使用しています.プロファイルを直接ロードするには、次のようにします.
    
package com.client;



import org.springframework.context.support.ClassPathXmlApplicationContext;



import com.entity.Person;

import com.rmi.server.Server;



public class TestSpringClient {

  public static void main(String[] args) {

	  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-beans.xml");   

      Server testrmiSpring = (Server) context.getBean("testrmiSpring");  

      System.out.println(testrmiSpring.helloWorld(" rmi"));

      Person person=testrmiSpring.getPerson("lhy", 22);

      System.out.println(person.getName());



}

}

これにより,変更再コンパイルの問題を解決できることがxmlの利点である.ここでrmi法、jdk 1.5以降、rmiコマンドを使用してstubやskeletonクラスを生成する必要はなく、動的に自動的に生成されます.
サービス側がサーバを使用したくない場合は、クライアントにプロファイルを手動でロードし、サービスを宣言できます.
        
文章は終わってみんなに次のプログラマーのいくつかの冗談の語録を分かち合います:ニュースを見て中国の入力法が世界で1位だと言います!リードしたらどうですか.西洋文字は入力法を必要としない.比べ物にならない.