1

twitter4j を使用してアプリケーションを開発しています。DAO を使用してツイートをファイルに保存します。

StatusListenerクラスの実装を作成しました:

public class StatusListenerStore implements StatusListener {

    // DAO
    private DAO<Status> m_statusDAO;


    // Constructor
    public StatusListenerStore(FactoryType a_factoryType,ArrayList<String> a_lanTrackList) {

        super();
        AbstractDAOFactory l_DAOFactory = AbstractDAOFactory.getFactory(a_factoryType);
        m_statusDAO = l_DAOFactory.getTweetDAO();

    }
}

呼び出される DAO は次のとおりです。

// Extract of my class
private static HadoopFileSystem m_hadoopFileSystem = null;

public TweetHADOOPDAO(){
    m_hadoopFileSystem = new HadoopFileSystem(m_path+m_filename);
}

public void close(){
    m_hadoopFileSystem.closeWriters();
}

HadoopFileSystem にOutputStreamは、閉じる必要があるものが含まれています。

まず第一に、すべてのプログラムに対して 1 つの HadoopFileSystem オブジェクト インスタンスのみが必要です。static キーワードは私を保証しますか?

次に、出力ストリームを閉じるには、ストリームが完了したときに DAO クラスで close 関数を呼び出す必要があります。正しいshutdown()関数を使用して閉じます。

しかし、m_statusDAOオブジェクトは StatusListener クラスで宣言されています。ストリームが close のときに、このクラスで close() 関数を呼び出すにはどうすればよいですか?

4

1 に答える 1

1

このstaticキーワードは、m_hadoopFileSystem変数がクラスのすべてのインスタンスで共有されることを意味しますが、変数を複数回割り当てることを妨げるものではありません。現在、オブジェクトHadoopFileSystemをインスタンス化するたびに新しいオブジェクトを取得TweetHADOOPDAOし、既存のオブジェクトへの参照を上書きしHadoopFileSystemます。

インスタンスが 1 つだけ作成されるようにする必要がある場合は、シングルトン パターンの使用を検討してください。

2 点目ですが、残念ながらシャットダウン イベントはないと思います。shutdown()ただし、を呼び出すメソッドをリスナーに追加できますTweetHADOOPDAO#close()

StatusListenerStore#shutdown()次に、 を呼び出した後に追加で呼び出すことができますTwitterSteam#shutdown()

于 2013-06-25T08:27:05.213 に答える