2013-12-15 3 views
0
Class FoodItem{ 
private String name; 
private int numCalories; 

public FoodItem(String s, int cals) 
{ 
name = s; 
numCalories = cals 
} 
public String getName() 
{ 
return name; 
} 
public int getNumOfCalories() 
{ 
return numCalories; 
} 
} 

public class FoodItemServer 
{ 
public static void main(String [] args) 
{ 
FoodItem f1 = new FoodItem("Wispa", 254); 
FoodItem f2 = new FoodItem("Apple", 45); 
System.out.println("Food Name: " + f1.getName + “has “ + 
f1.getCalories +“calories”); 
} 
} 

최근에 RMI를 사용하기 시작 했으므로 이해하기가 어려워요.RMI를 사용하여 객체에 액세스

이전 예제에서 우리는 우리의 객체를 저장하기 위해 팩토리를 사용했고 공장에서 호출 한 인스턴스의 서버 클래스에 Naming.rebind()을 사용했습니다.

위 예제에서 구현 및 서버 클래스 만 있고 팩토리가 사용되지 않고 원격으로 객체에 액세스 할 수 있도록 코드를 다시 팩터링 할 수 있습니까? Naming.rebind()을 다시 사용하거나 사용하고 싶습니다. 또 다른 구현? RMI를 사용하려면

import java.rmi.Naming; 

/* 
* Creates the server for using RMI 
*/ 
public class PlayerServer 
{ 
    public static void main(String args[]) 
    { 
      System.out.println("Player Server Starting"); 
      try{ 
       PlayerFactory aFactory = PlayerFactory.getInstance(); 
       Naming.rebind("factory", aFactory); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

답변

1

이는 java.rmi.Remote 인터페이스 를 구현하는 인터페이스를 필요로하고 FoodItemServer의 필수가 java.rmi.server.UnicastRemoteObject으로부터 확장 :

내가 전에 사용 된 것입니다 이 인터페이스를 구현하십시오.

또한이 클래스를 이 추가로 시작되어야하는 RMIRegistry에 등록해야합니다. 이 서버는 JNDI 인터페이스를 제공하는 특수한 서버입니다.

보다에는 java.naming 메커니즘을 사용하여 RMI 원격 인터페이스의 형식의 인스턴스를 받기 위해 rmiregistry에 요청할 수 있습니다 클라이언트,

+0

좋아, 난 당신이, 그것의 유사한 무슨 말을하는지 이해하는 우리 전에는 일식에서 일주일에 그것을 어지럽히고 난 괜찮아, 고마워 크리스천, 아플, 최대한 빨리 대답을 받아 들인다. – user2757842

+0

EJB 기술을 찾아 보거나 가능한 경우 WebService (SOAP/Rest)를 사용한다. RMI는 여전히 가능하지만 대부분의 경우 가능한 경우 이러한보다 정교한 기술을 사용하는 것이 좋습니다. – Diversity

+0

RMI 레지스트리는 RMI 인터페이스를 제공합니다. JNDI는 RMI 인터페이스를 제공합니다. 레지스트리는 JNDI 인터페이스를 제공하지 않습니다. UnicastRemoteObject를 확장하거나 객체를 레지스트리에 바인드하는 것은 필수적이지 않습니다. 각각의 경우에 대안이 있습니다. – EJP