2013-07-28 5 views
2

등록 양식에서 데이터를 가져 와서 데이터베이스에 저장하는 매우 기본적인 기능을 수행하는 다소 표준적인 GWT 양식이 있습니다.GWT에서 멀티 스레딩을 수행하려면 어떻게해야합니까?

authenticationService.registerStudent(email, password, firstName, lastName, contact, 
      country, countryCode, school, lecturerFirstName, lecturerLastName, 
      lecturerEmail, language, new AsyncCallback<Boolean>() { 

     @Override 
     public void onFailure(Throwable throwable) { 

     } 

     @Override 
     public void onSuccess(Boolean bool) { 

     } 
    }); 

서버 측에서 데이터를 데이터베이스에 저장하는 서블릿이 있습니다.

public class AuthenticationServiceImpl extends RemoteServiceServlet implements AuthenticationService { 

@Override 
public Boolean registerStudent(String email, String password, String firstName, String lastName, 
           String contact, String country, String countryCode, String school, 
           String lecturerFirstName, String lecturerLastName, String lecturerEmail, 
           String language) throws IllegalArgumentException { 

    .... 

    } 
} 

나는 그 사람에게 계좌 확인을 요청하는 사람에게 확인 이메일을 보내고 싶습니다. registerStudent() 함수에서 전자 메일 논리를 구현할 때의 문제점은 클라이언트 측에서 응답이없는 SMTP 서버와 통신하는 데 약간의 시간이 걸릴 수 있다는 것입니다.

데이터를 성공적으로 삽입 할 때 함수에서 true을 반환 할 수있는 동안 보내는 전자 메일 기능을 다른 클래스/함수에 "위임"하는 방법은 무엇입니까? 나는 어떤 형태의 멀티 스레딩이 필요하다고 생각하지만, 그것을 수행하는 방법을 확신 할 수 없다.

+0

나는 sanbhat의 대답에 동의합니다. 분명히, 등록 이메일을 보내는 것에 대한이 질문에 특히 전자 메일을 동 기적으로 보내는 것 (예 : 클라이언트를 잠그고 전자 메일이 전송되기를 기다리는 것)은 그렇게 나쁜 대안이 아닙니다. "과부하 된 서비스, 나중에 다시 시도하십시오"와 같은 이메일 전송과 관련하여 문제가 발생했을 때를 대비해 클라이언트에게 피드백을 제공 할 수 있습니다 .... –

답변

4

AuthenticationServiceImpl은 GWT 서블릿이며 여기에는 제한 없음이 Java 라이브러리를 사용합니다. Runnable을 만들고이를 Thread으로 전달하고 start()을 호출하여 메일을 병렬로 전송할 수 있습니다. 실행 파일의 run() 메소드에는 전자 메일을 보내는 논리가 있어야합니다.

당신은 자바 클래스 라이브러리에 대한 전체 액세스 권한이 서버 측에서 이후

+1

중요한 것은 다음과 같습니다. 서블릿에서 원하는 것을 수행하십시오. 그런 다음 서버 측에서 사용하는 프레임 워크에 따라 수천 가지 구현 및 디자인이있을 수 있으므로 해당 전자 메일을 보내십시오. –

2

here 멀티 스레딩에 대한 자세한 문서와 예제를 볼 수 있습니다, 당신은 이메일을 전송을 담당 새 스레드를 시작 스레딩을 사용할 수 있습니다. 이 같은

뭔가 :

public class sendRegistrationEmail implements Runnable { 
    @Override public void run() { 
     ... here goes the code to send email ... 
} 

은 다음과 새 스레드를 시작할 수 있습니다

Thread emailThread = new Thread(new sendRegistrationEmail()); 
emailThread.start(); 
관련 문제