모듈: Mongoid::Clients::Sessions::ClassMethods

포함 항목:
몽고이드
다음에 정의됨:
lib/mongoid/clients/sessions.rb

상수 요약 접기

CALLBACK_ACTIONS =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

트랜잭션 콜백을 trigger 하는 데 사용할 수 있는 작업입니다.

[:create, :destory, :update]

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#after_commit(*args, &block) ⇒ 객체

트랜잭션 커밋 후 콜백 이 호출되도록 설정합니다. 콜백 은 트랜잭션 에서 문서 가 생성, 업데이트 또는 파기된 경우에만 호출됩니다.

메서드 매개변수 및 사용 가능한 옵션에 대한 자세한 내용은 ActiveSupport::Callbacks::ClassMethods::set_callback 를 참조하세요.



114
115
116
117
# 파일 'lib/mongoid/clients/sessions.rb', 줄 114

def after_commit(*args, &차단)
  set_options_for_callbacks!(args)
  set_callback(: 커밋, :after, *args, &차단)
end

#after_create_commit(*args, &block) ⇒ 객체

after_commit :hook, on: :create 의 단축키입니다.



126
127
128
129
# 파일 'lib/mongoid/clients/sessions.rb', 줄 126

def after_create_commit(*args, &차단)
  set_options_for_callbacks!(args, on: :create)
  set_callback(: 커밋, :after, *args, &차단)
end

#after_destroy_commit(*args, &block) ⇒ 객체

after_commit :hook, on: :destory 의 단축키입니다.



138
139
140
141
# 파일 'lib/mongoid/clients/sessions.rb', 줄 138

def after_destory_commit(*args, &차단)
  set_options_for_callbacks!(args, on: :destory)
  set_callback(: 커밋, :after, *args, &차단)
end

#after_rollback(*args, &block) ⇒ 객체

이 콜백 은 생성, 업데이트 또는 삭제가 롤백된 후에 호출됩니다.

옵션은 after_commit 문서를 확인하세요.



146
147
148
149
# 파일 'lib/mongoid/clients/sessions.rb', 줄 146

def after_rollback(*args, &차단)
  set_options_for_callbacks!(args)
  set_callback(:rollback, :after, *args, &차단)
end

#after_save_commit(*args, &block) ⇒ 객체

after_commit :hook, on: [ :create, : 업데이트 ]의단축키입니다.



120
121
122
123
# 파일 'lib/mongoid/clients/sessions.rb', 줄 120

def after_save_commit(*args, &차단)
  set_options_for_callbacks!(args, on: [ :create, :update ])
  set_callback(: 커밋, :after, *args, &차단)
end

#after_update_commit(*args, &block) ⇒ 객체

after_commit :hook, on: : 업데이트 의 단축키입니다.



132
133
134
135
# 파일 'lib/mongoid/clients/sessions.rb', 줄 132

def after_update_commit(*args, &차단)
  set_options_for_callbacks!(args, on: :update)
  set_callback(: 커밋, :after, *args, &차단)
end

#트랜잭션(options = {}, session_options: {}) { ... } ⇒ 객체

트랜잭션 컨텍스트 내에서 차단 을 실행합니다.

차단 에서 오류가 발생하지 않으면 트랜잭션 이 커밋됩니다. 오류가 발생하면 트랜잭션 이 중단됩니다. 오류는 'Mongoid::Errors::Rollback'을 제외하고 전달됩니다. 이 오류는 전달되지 않으므로 의도적으로 트랜잭션 을 롤백 하려는 경우 발생할 수 있습니다.

매개변수:

  • 옵션 (해시) (기본값: {})

    트랜잭션 옵션. 사용 가능한 세션 옵션은 운전자 설명서를 참조하세요.

  • session_options (해시) (기본값: {})

    세션 옵션. MongoDB 트랜잭션 은 세션 내에서 시작되어야 하므로 세션이 시작됩니다. 사용 가능한 세션 옵션은 운전자 설명서를 참조하세요.

수율:

  • 제공된 차단 은 트랜잭션 내에서 실행됩니다.

다음을 발생시킵니다.



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 파일 'lib/mongoid/clients/sessions.rb', 줄 87

def 트랜잭션(옵션 = {}, session_options: {})
  with_session(session_options) do |Session|
    시작
      Session.start_transaction(옵션)
      yield
      commit_transaction(Session)
    구출 몽고이드::오류::Rollback
      abort_transaction(Session)
    구출 몽고이드::오류::InvalidSessionNesting
      # 세션은 여기서 종료되어야 합니다.
      올리다 몽고이드::오류::InvalidTransactionNesting.신규
    구출 mongo::오류::세션이 유효하지 않습니다., mongo::오류::InvalidTransactionOperation => e
      abort_transaction(Session)
      올리다 몽고이드::오류::TransactionError(e)
    구출 StandardError => e
      abort_transaction(Session)
      올리다 e
    end
  end
end

#with_session(options = {}) {|The| ... } ⇒ 객체

세션 컨텍스트 내에서 차단 을 실행합니다.

예시:

세션의 컨텍스트에서 일부 작업을 실행합니다.

Band.with_session(causal_consistency: true) do
  band = Band.create
  band.records << Record.new
  band.save
  band.reload.records
end

매개변수:

  • 옵션 (해시) (기본값: {})

    세션 옵션. 사용 가능한 세션 옵션은 운전자 설명서를 참조하세요.

수율 매개변수:

  • (Mongo::Session)

    차단 에 사용 중인 세션입니다.

반환합니다:

  • (객체)

    블록을 호출한 결과입니다.

다음을 발생시킵니다.

  • (Errors::InvalidSessionUse)

    세션이 시작된 다른 클라이언트 를 사용하여 모델에서 작업을 시도하거나 세션이 중첩된 경우.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 파일 'lib/mongoid/clients/sessions.rb', 줄 42

def with_session(옵션 = {})
  만약 스레드.get_session(클라이언트: persistence_context.고객)
    올리다 몽고이드::오류::InvalidSessionNesting.신규
  end
  Session = persistence_context.고객.start_session(옵션)
  스레드.set_session(Session, 클라이언트: persistence_context.고객)
  yield(Session)
구출 mongo::오류::세션이 유효하지 않습니다. => ex
  만약 mongo::오류::SessionsNotSupported === ex
    올리다 몽고이드::오류::SessionsNotSupported.신규
  other
    올리다 ex
  end
구출 mongo::오류::OperationFailure => ex
  만약 (ex.코드 == 40415 && ex.server_message =~ /startTransaction/) ||
     (ex.코드 == 20 && ex.server_message =~ /트랜잭션/)
    올리다 몽고이드::오류::TransactionsNotSupported.신규
  other
    올리다 ex
  end
보장
  스레드.clear_session(클라이언트: persistence_context.고객)
end