0

友人、投稿、または新しいフィードを自動的に取得するために、Quartz Job を介して facebook API を呼び出そうとしていますが、Job を実行できません。SocialConfig が間違っていると思います。コントローラから facebookService を呼び出すと、正常に動作します。この問題を理解するのを手伝ってくれませんか。どうもありがとう。

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」という名前の Bean の作成中にエラーが発生しました: スコープ「セッション」は現在のスレッドに対してアクティブではありません。シングルトンから参照する場合は、この Bean のスコープ付きプロキシを定義することを検討してください。ネストされた例外は java.lang.IllegalStateException: No thread-bound request found : 実際の Web 要求の外部で要求属性を参照していますか、または元の受信スレッドの外部で要求を処理していますか? 実際に Web リクエスト内で操作していてもこのメッセージが表示される場合、コードはおそらく DispatcherServlet/DispatcherPortlet の外部で実行されています。この場合、RequestContextListener または RequestContextFilter を使用して現在のリクエストを公開します。

web.xml に追加して RequestContextListener を試しましたが、うまくいきません。

Job からの呼び出し

@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);
    }
}

フェイスブックサービス

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();
}
4

1 に答える 1