Java Spring 에서 Firebase 데이터베이스를 핸들링 하고싶습니다.


JAVA Spring 을 사용하여 Firebase 의 데이터베이스를 핸들링 하는 앱을 만드는 중입니다.

문제는 firebase 데이터베이스가 SQL 연결이이나 REST방식이 아닌, 자체적인 EventListener방식으로 동작을 하여 언제 값이 들어올지 모르는 상태이고, 항상 EventListener을 통하여 값을 가져와야 하는 상황입니다.

아래는 제가 만든 코드이고 항상 REST값은 빈 리스트가 뜨지만 수행되고 최초엔 5초뒤에 로그에 값들이 찍히고 이후엔 1초내로 로그에 값이 찍히지만 REST 에선 값이찍히지 않는 상황입니다.

세마포어 등을 사용하여 listener가 값을 가져오는 경우를 판별하고 그동안 락을 걸어야 하는지,

쉽게 해결하는 방법이 있는지 궁금합니다.

@RestController
@RequestMapping("show")
public class ShowViewController {

    @Autowired
    ShowService showService;

    @RequestMapping(method = RequestMethod.GET)
    public List listShow(Model model) {

        /**
         * 1. Service 호출
         */
        List showList = showService.getShowList();
        model.addAttribute("list", showList);

        /**
         * 5. showList 리턴
         */
        return showList;
    }

}
@Service
@Slf4j
public class ShowService {

    private List<Show> showList;

    @Async
    public List<Show> getShowList() {
        /**
         * 2. 호출된 Service 의 Method
         */

        showList = new ArrayList<>();

        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
        DatabaseReference ref = firebaseDatabase.getReference("shows");

        /**
         * 3. Handler로 데이터 가져오기
         */
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                log.info("listner");
                Iterable<DataSnapshot> children = dataSnapshot.getChildren();
                /**
                 * 4. 데이터를 Model에 매핑하는 비동기 처리
                 */
                for (DataSnapshot child : children) {
                    Show show = child.getValue(Show.class);
                    log.info("show = {}",show.getTitle() );
                    showList.add(show);
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        return showList;
    }
  • 2016년 08월 29일에 작성됨

조회수 193


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close