2016-07-21 4 views
0

Я хочу вызвать асинхронный вызов службы webservice, используя шаблон весны 3.1. В настоящее время мы используем метод Resttemplate.getForObject для вызова остальной веб-службы. Теперь согласно требованию мы должны одновременно вызвать другой метод webservice вместе с существующим. Мы вызываем этот вызов метода из EJB 2.1 безстоящего сеансового компонента, создавая экземпляр класса метода.Как реализовать асинхронный клиент webservice для отдыха с помощью RestTemplate?

Пример кода, как показано ниже: -

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) Убедитесь, что метод async является общедоступным и вызван из другого класса. Таким образом, Spring «видит» аннотацию, когда метод вызывается рефлексивно.