0

Я пытаюсь вызвать 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(); 
} 

ответ

0

Я нашел другое решение для этого, следуя Facebook4j

ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setDebugEnabled(true) 
     .setOAuthAppId("app_id") 
     .setOAuthAppSecret("app_secret") 
     .setOAuthAccessToken("user_token") 
     .setOAuthPermissions("email,publish_actions,public_profile, basic_info, user_likes"); 
    FacebookFactory ff = new FacebookFactory(cb.build()); 
    // Generate facebook instance. 
    this.facebook = ff.getInstance(); 

Проблема в том, что, когда моя работа бежать и звонить в Facebook API, оно не иметь токен доступа пользователя, поэтому при отправке сообщения на стену мое задание на кварце разрешает публиковать сообщения.

 Смежные вопросы

  • Нет связанных вопросов^_^