Я пытаюсь вызвать API facebook через свой Quartz Job для автоматического получения друзей, сообщений или новых файлов ... но я не могу запустить Job. Я думаю, что я ошибаюсь в SocialConfig. Когда я вызываю facebookService от контроллера, он работает нормально. Можете ли вы помочь мне разобраться в этой проблеме. Большое спасибо.Quartz Job не может позвонить в facebook Service (Spring Social)
SocialConfig
public class SocialConfig {
@Value("${facebook.clientId}")
private String facebookClientId;
@Value("${facebook.clientSecret}")
private String facebookClientSecret;
@Inject
private DataSource dataSource;
@Bean
public ConnectionFactoryLocator connectionFactoryLocator() {
ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();
registry.addConnectionFactory(new FacebookConnectionFactory(facebookClientId, facebookClientSecret));
return registry;
}
@Bean
public UsersConnectionRepository usersConnectionRepository() {
JdbcUsersConnectionRepository repository = new JdbcUsersConnectionRepository(dataSource,
connectionFactoryLocator(), Encryptors.noOpText());
repository.setConnectionSignUp(new SimpleConnectionSignUp());
return repository;
}
@Bean
@Scope(value="request", proxyMode=ScopedProxyMode.NO)
public ConnectionRepository connectionRepository() {
User user = SecurityContext.getCurrentUser();
return usersConnectionRepository().createConnectionRepository(user.getId());
}
@Bean
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public Facebook facebook() {
return connectionRepository().getPrimaryConnection(Facebook.class).getApi();
}
Получение ошибки
org.springframework.beans.factory.BeanCreationException: Ошибка при создании боб с именем 'scopedTarget.facebook': Сфера 'сессии' не активен для текущей нити; рассмотрите возможность определения доверенного прокси для этого компонента, если вы намерены ссылаться на него из одноэлементного; Вложенное исключение - это java.lang.IllegalStateException: Не найдено ни одного связанного с потоком запроса: Вы имеете в виду атрибуты запроса вне фактического веб-запроса или обработку запроса вне исходного потока? Если вы действительно работаете в веб-запросе и все еще получаете это сообщение, ваш код, вероятно, работает за пределами DispatcherServlet/DispatcherPortlet: В этом случае используйте RequestContextListener или RequestContextFilter для отображения текущего запроса.
Я пробовал RequestContextListener, добавляя в web.xml, но он не работает.
Звонок с работы.
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
try {
ApplicationContextProvider appContext = new ApplicationContextProvider();
FacebookService facebookService = appContext.getApplicationContext().getBean("facebookService", FacebookService.class);
//##It shows error here##
System.out.println("!!User: "+facebookService.getFacebookFriends().get(0).getName());
//runMeTask.printMe();
System.out.println("!!*****Quartz*****!!");
} catch (Exception ex) {
System.out.println(ex);
}
}
Facebook Service
public class FacebookService {
private Facebook facebook;
@Inject
public FacebookService(Facebook facebook) {
this.facebook = facebook;
}
}
public Facebook getFacebook() {
return facebook;
}
public void setFacebook(Facebook facebook) {
this.facebook = facebook;
}
public List<Reference> getFacebookFriends() {
// Get Friend List
return getFacebook().friendOperations().getFriends();
}