EJB 클라이언트 및 액세스 방식

3915 단어 ejb
오늘 배운 두 번째 중요한 개념은 EJB의 로컬 클라이언트와 원격 클라이언트, 그리고 로컬 접근 방식과 원격 접근 방식의 관련 개념이다.
 
원격 클라이언트 및 원격 액세스 방식:
 
원격 클라이언트란 클라이언트 프로그램과 JBOSS 응용 서버, 그리고 서버에 배치된 EJB가 서로 다른 JVM 프로세스에 있다는 것을 말한다.아래의 실례는 멀다는 것을 설명했다
 
클라이언트의 특징과 상응하는 접근 방식.
 
클라이언트 프로그램:
 
public class RemoteEjbClient {
	public static void main(String[] args) {
		try {
			InitialContext context = new InitialContext();
			UserServiceRemote userService = (UserServiceRemote)context.lookup("UserServiceImpl/remote");
			User user = new User();
			user.setUsername("zhangsan");
			userService.save(user);
			System.out.println(user.getId());

		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 
이 중에서 User Service Remote 인터페이스는 원격 방식으로 표시되어 사용자의 id 값을 출력합니다.
 
서버 측 EJB:
 
@Stateless
@Remote(UserServiceRemote.class)
@Local(UserServiceLocal.class)
public class UserServiceImpl implements UserServiceLocal,UserServiceRemote{

	public void save(User user) {
		// TODO Auto-generated method stub
		user.setId(100);
		System.out.println(user.getUsername()+" ,id="+user.getId());
	}

}

 
간단한 방법은user 실례에 id를 설정하고 클라이언트가 사용자 대상의 username에 값을 부여하는 것입니다.
 
서버 쪽에서user의 id를 100으로 설정했습니다.그러나 클라이언트 프로그램을 실제로 실행한 결과는 다음과 같습니다.
 
결과: 0
 
이 실례 설명: 원격 접근 방식에서 서버 측에서 사용하는user는 실제로 클라이언트에 대한 복사본입니다. 이렇게user가 서버 측에서 하는 모든
 
수정은 클라이언트의user에 반영할 수 없습니다.
 
여기서 주의해야 할 것은 원격 클라이언트는 원격 방식으로만 접근할 수 있다는 것이다.
 
 
로컬 클라이언트 및 적절한 액세스 방식:
 
로컬 클라이언트란 클라이언트 프로그램이 배치된 EJB 서버와 같은 JVM 프로세스에서 실행되는 것을 말한다.
 
서버 측 프로그램은 수정할 필요가 없습니다. 서버와 같은 JVM 프로세스에서 실행할 수 있도록 웹 프로젝트를 만들 수 있습니다. 이 웹 프로젝트를
 
동일한 서버에 배치합니다.이 예에서는 서브렛을 예로 들 수 있습니다.
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		User user = null;
		try {
			InitialContext context = new InitialContext();
			UserServiceLocal userService = (UserServiceLocal)context.lookup("UserServiceImpl/local");
			user = new User();
			user.setUsername("lisi");
			userService.save(user);
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				out
				.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.println(user.getId());
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

 
원격 클라이언트와 달리 UserServiceLocal 형식의 실례를 생성했습니다. 마찬가지로 save () 방법을 실행한 다음user입니다.페이지에 id 인쇄
 
로컬 액세스 방식으로 접근한 결과 위와 크게 다르다.
 
결과:100.
 
설명: 로컬 접근 방식에서 클라이언트와 서버 측이 접근하는 것은 같은 실례이기 때문에 서버 측의 변화는 모두 클라이언트에게 반영될 것이다.
 
참고 로컬 클라이언트는 원격 액세스를 사용하여 EJB에 액세스할 수도 있습니다.
 
방법은 위의 코드가 빨간색으로 표시된 문장을 바꾸는 것이다.
 
UserServiceRemote userService = (UserServiceRemote)context.lookup("UserServiceImpl/remote");

 
수정된 실행 결과는 위의 원격 접근 방식과 같습니다.
 
결과: 0.
 
마지막으로 요약: 원격 클라이언트는 원격 방식으로만 EJB에 접근할 수 있고 로컬 클라이언트는 로컬 방식도 사용할 수 있고 원격 방식으로도 EJB에 접근할 수 있다.
 
그러나 로컬 클라이언트가 원격 방식으로 접근하는 효율은 비교적 낮을 것이다.

좋은 웹페이지 즐겨찾기