JTA กับธุรกรรมในประเทศแตกต่างกันอย่างไร?


85

JTA กับธุรกรรมในประเทศแตกต่างกันอย่างไร?

ตัวอย่างที่แสดงว่าเมื่อใดควรใช้ JTA และเมื่อใดควรใช้ธุรกรรมในพื้นที่จะดีมาก

คำตอบ:


137

JTAเป็น API ทั่วไปสำหรับจัดการธุรกรรมใน Java ช่วยให้คุณสามารถเริ่มต้นกระทำและย้อนกลับธุรกรรมด้วยวิธีที่เป็นกลางของทรัพยากร โดยทั่วไปสถานะธุรกรรมจะถูกเก็บไว้ใน TLS (Thread Local Storage) และสามารถแพร่กระจายไปยังเมธอดอื่นใน call-stack ได้โดยไม่จำเป็นต้องส่งผ่านอ็อบเจ็กต์บริบทที่ชัดเจน ทรัพยากรในการทำธุรกรรมสามารถเข้าร่วมธุรกรรมต่อเนื่องได้ หากมีทรัพยากรมากกว่าหนึ่งรายการที่เข้าร่วมในธุรกรรมดังกล่าวอย่างน้อยหนึ่งในนั้นจะต้องเป็นทรัพยากรที่เรียกว่า XA

A resource local transactionคือธุรกรรมที่คุณมีกับทรัพยากรเดียวโดยใช้ API เฉพาะของตัวเอง โดยทั่วไปธุรกรรมดังกล่าวจะไม่แพร่กระจายไปยังเมธอดอื่นใน call-stack และคุณจะต้องส่งผ่านอ็อบเจ็กต์บริบทที่ชัดเจน ในธุรกรรมทรัพยากรในพื้นที่ส่วนใหญ่เป็นไปไม่ได้ที่จะมีทรัพยากรหลายรายการที่เข้าร่วมในธุรกรรมเดียวกัน

คุณจะใช้ทรานแซกชันรีซอร์สโลคัลในโค้ด JDBC ระดับต่ำใน Java SE ที่นี่วัตถุบริบทแสดงโดยตัวอย่างของjava.sql.Connection. ตัวอย่างอื่น ๆ ของการทำธุรกรรมทรัพยากรในพื้นที่คือนักพัฒนาที่สร้างแอปพลิเคชันระดับองค์กรในราวปี 2545 เนื่องจากตัวจัดการธุรกรรม (ที่ใช้โดย JTA) มีราคาแพงแหล่งที่มาแบบปิดและสิ่งที่ซับซ้อนในการตั้งค่าในยุคนั้นผู้คนจึงได้รับทรัพยากรในท้องถิ่นที่มีราคาถูกกว่าและง่ายกว่า

คุณจะใช้ธุรกรรม JTA ในทุกสถานการณ์อื่น ๆ เซิร์ฟเวอร์โอเพ่นซอร์สที่เรียบง่ายขนาดเล็กฟรีและโอเพ่นซอร์สเช่น TomEE (25MB) หรือ GlassFish (35MB) รองรับ JTA ได้ทันที ไม่มีอะไรต้องตั้งค่าและใช้งานได้จริง

สุดท้ายเทคโนโลยีเช่น EJB และฤดูใบไม้ผลิทำให้แม้แต่ JTA declarative transactionsใช้โดยการเสนอขายง่าย ในกรณีส่วนใหญ่แนะนำให้ใช้เนื่องจากง่ายกว่าสะอาดกว่าและมีข้อผิดพลาดน้อยกว่า ทั้ง EJB และ Spring สามารถใช้ JTA ภายใต้ฝาครอบ


5
+1 เพื่ออธิบายประวัติและพัฒนาการของการใช้ JTA (EJB, Spring, ฯลฯ .. )
Marco

4

ควรตั้งค่าประเภทธุรกรรมเป็น "RESOURCE_LOCAL" สำหรับแอปพลิเคชัน Java SE และเป็น "JTA" สำหรับแอปพลิเคชัน Java EE "RESOURCE_LOCAL" อาจทำงานได้ดีกับเว็บแอปพลิเคชันบางตัวที่ติดตั้งบน Tomcat แต่อาจทำให้เกิดปัญหาเมื่อคุณเรียกใช้แอปพลิเคชันของคุณภายใต้สภาพแวดล้อม glassfish

หากคุณกำลังทำธุรกรรมแบบกระจายคุณต้องใช้ "JTA" เป็นผู้จัดการธุรกรรมของคุณ


1

Java Transaction API (JTA) เป็นหนึ่งใน Java Enterprise Edition (Java EE) API ที่อนุญาตให้ทำธุรกรรมแบบกระจายผ่านทรัพยากร XA หลายรายการในสภาพแวดล้อม Java


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.