2016-07-21 5 views
0

私はspring 3.1 restテンプレートを使用して、非同期にrest webservice呼び出しを呼び出す必要があります。現在Resttemplate.getForObjectメソッドを使用して残りのWebサービスを呼び出しています。現在、要件ごとに、既存のWebサービスメソッドと同時に別のWebサービスメソッドを呼び出す必要があります。 EJB 2.1ステートレスセッションBeanからこのメソッド呼び出しを呼び出すには、メソッドクラスをインスタンス化します。RestTemplateを使用して非同期の残りのWebサービスクライアントを実装する方法は?

サンプルコードは以下の通りです: -

public class MyImplServerBean extends EJBObject{ 
    RestServiceImpl restImpl = new RestServiceImpl(); 
    ArrayList<User> userDetailsList = restImpl.getUserDetails(123); 
} 

public class RestServiceImpl { 

    RestTemplate template = new RestTemplate(); 

    public ArrayList<User> getUserDetails(int userId){ 

    ArrayList<User> userList = new ArrayList<User>(); 
    String url = "http://localhost:7001/myUserService/userId"; 
    User user = template.getForObject(url, User.class); 
    userList.add(user); 
    return userList; 
} 

は現在非同期getUserDetailsメソッドの呼び出しを行う必要があります。 @Asyncアノテーションを使用してアイデアを得ましたが、正確に実装する方法を認識していませんでした。 これで助けてくれますか?

答えて

0

私はthisチュートリアルを使用して同様のタスクを達成しました。私はいくつかの修正を加えました。それを働かせる方法はここにあります。

1)構成クラスを作成し、それがApplicationContextによってスキャンされていることを確認します。私はAnnotationConfigWebApplicationContextを使用します。

@EnableAsync 
@Configuration 
public class AsyncConfiguration implements AsyncConfigurer 
{ 
    @Bean(name = "threadPoolTaskExecutor") 
    public Executor threadPoolTaskExecutor() 
    { 
     ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 
     executor.setCorePoolSize(10); 
     return executor; 
    } 

    @Override 
    public Executor getAsyncExecutor() 
    { 
     return new ThreadPoolTaskExecutor(); 
    } 

    @Override 
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() 
    { 
     return new CustomAsyncExceptionHandler(); 
    } 
} 

2)は、ボイドや将来返さなければならないのいずれか

@Async("threadPoolTaskExecutor") 

あなたの方法であなたの方法に注釈を付けます。

3)非同期メソッドがpublicで、別のクラスから呼び出されていることを確認してください。このようにして、Springはメソッドが反映されたときにアノテーションを "見ます"。

関連する問題