ঘোষণামূলক লেনদেনের সুযোগ
স্প্রিং এবং জেপিএ @Transaction
টীকা উভয়ই আপনাকে প্রদত্ত অ্যাপ্লিকেশন লেনদেনের সুযোগটি নির্ধারণ করতে দেয়।
সুতরাং, যদি কোনও পরিষেবা পদ্ধতিটি @Transactional
টীকাগুলির সাথে টীকাযুক্ত করা হয় , তবে এটি একটি লেনদেনের প্রসঙ্গে চলে। যদি পরিষেবা পদ্ধতিটি একাধিক ডিএও বা সংগ্রহশালা ব্যবহার করে তবে সমস্ত পঠিত বিজ্ঞাপন রাইট অপারেশন একই ডাটাবেস লেনদেনে কার্যকর করা হবে।
বসন্ত @Transactional
org.springframework.transaction.annotation.Transactional
টীকা স্প্রিং কাঠামোর 1.2 সংস্করণ (2005 প্রায়) যেহেতু উপলব্ধ করা হয়েছে, এবং এটি আপনি নিম্নলিখিত লেনদেনের বিশিষ্টতাগুলি সেট করার জন্য অনুমতি দেয়:
isolation
: অন্তর্নিহিত ডাটাবেস বিচ্ছিন্নতা স্তর
noRollbackFor
এবং noRollbackForClassName
: জাভা Exception
ক্লাসগুলির তালিকা যা কোনও লেনদেন রোলব্যাকটি ট্রিগার না করে ট্রিগার করা যায়
rollbackFor
এবং rollbackForClassName
: জাভা Exception
ক্লাসগুলির তালিকা যা নিক্ষেপ করার সময় একটি লেনদেন রোলব্যাককে ট্রিগার করে
propagation
: Propagation
এনাম দ্বারা প্রদত্ত লেনদেন প্রচারের ধরণ । উদাহরণস্বরূপ, যদি লেনদেনের প্রসঙ্গটি উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে (যেমন, REQUIRED
) বা একটি নতুন লেনদেনের প্রসঙ্গ তৈরি করা উচিত (উদাহরণস্বরূপ REQUIRES_NEW
) বা কোনও ব্যতিক্রম নিক্ষেপ করা উচিত যদি কোনও লেনদেনের প্রসঙ্গ উপস্থিত না থাকে (যেমন, MANDATORY
) বা যদি কোনও ব্যতিক্রম ছুঁড়ে দেওয়া উচিত যদি কোনও বর্তমান লেনদেনের প্রসঙ্গ পাওয়া যায় (যেমন, NOT_SUPPORTED
)।
readOnly
: বর্তমান লেনদেনের কোনও পরিবর্তন প্রয়োগ না করে কেবল ডেটা পড়তে হবে কিনা whether
timeout
: একটি সময়সীমা ব্যতিক্রম না ছোঁড়া হওয়া পর্যন্ত লেনদেনের প্রসঙ্গটি কত সেকেন্ড চলতে দেওয়া উচিত?
value
বা transactionManager
: TransactionManager
লেনদেন প্রসঙ্গে বাঁধাকালীন ব্যবহার করার জন্য বসন্ত শিমের নাম ।
জাভা ইই @Transactional
javax.transaction.Transactional
টীকা (2013 প্রায়) জাভা EE 7 স্পেসিফিকেশন দ্বারা যোগ করা হয়েছিল। সুতরাং, জাভা ইই টীকাগুলিটি 8 বছর পরে যুক্ত করা হয়েছিল যা এটির বসন্তের অংশ।
জাভা EE @Transactional
মাত্র 3 টি বৈশিষ্ট্য সংজ্ঞায়িত করেছে:
dontRollbackOn
: জাভা Exception
ক্লাসগুলির তালিকা যা কোনও লেনদেন রোলব্যাকটি ট্রিগার না করে ট্রিগার করা যায়
rollbackOn
: জাভা Exception
ক্লাসগুলির তালিকা যা নিক্ষেপ করার সময় একটি লেনদেন রোলব্যাককে ট্রিগার করে
value
: TxType
এনাম দ্বারা প্রদত্ত প্রচারের কৌশল । উদাহরণস্বরূপ, যদি লেনদেনের প্রসঙ্গটি উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে (যেমন, REQUIRED
) বা একটি নতুন লেনদেনের প্রসঙ্গ তৈরি করা উচিত (উদাহরণস্বরূপ REQUIRES_NEW
) বা কোনও ব্যতিক্রম নিক্ষেপ করা উচিত যদি কোনও লেনদেনের প্রসঙ্গ উপস্থিত না থাকে (যেমন, MANDATORY
) বা যদি কোনও ব্যতিক্রম ছুঁড়ে দেওয়া উচিত যদি কোনও বর্তমান লেনদেনের প্রসঙ্গ পাওয়া যায় (যেমন, NOT_SUPPORTED
)।
কোনটি বেছে নেবে?
আপনি যদি স্প্রিং বা স্প্রিং বুট ব্যবহার করেন তবে স্প্রিং @Transactional
টীকাটি ব্যবহার করুন , কারণ এটি আপনাকে জাভা ই ই @Transactional
টিক চিহ্নের চেয়ে আরও বেশি বৈশিষ্ট্যগুলি কনফিগার করতে দেয় ।
আপনি যদি একা জাভা ইই ব্যবহার করে থাকেন এবং আপনি নিজের অ্যাপ্লিকেশনটি জাভা ইই অ্যাপ্লিকেশন সার্ভারে স্থাপন করেন, তবে জাভা ইই Trans। @ ট্রানজেকশনাল টিকাটি ব্যবহার করুন।
স্প্রিং বা জাভা ইই @Transactional
সংজ্ঞাগুলি ব্যবহার করার সময় বিচ্ছিন্ন স্তরের কনফিগারেশনটি কীভাবে পৃথক হয় সে সম্পর্কে আরও তথ্যের জন্য , এই নিবন্ধটি দেখুন ।
javax.transaction.Transactional
যাতে এখন কোনও অতিরিক্ত পদক্ষেপ ছাড়াই এটি বসন্ত অ্যাপ্লিকেশনগুলিতেও এটি ব্যবহার করতে পারে। আইএমও, ডিজাইনের দৃষ্টিকোণ থেকে এটি বেশ খারাপ সিদ্ধান্ত ছিল , কারণ আমার অভিজ্ঞতার বাইরে অনেক বিকাশকারীই এই দুটিকে তাদের কোডটিতে অযৌক্তিকভাবে বিভ্রান্ত করে দেয় যা পরবর্তীকালে সমস্যার দিকে পরিচালিত করে।