คลาสในไลบรารี JRE สนับสนุนการอ่านและ / หรืออะซิงโครนัสที่อ่านได้จากชุดประกอบภายนอก / ไม่ใช่ JRE หรือไม่?


12

ฉันจะใช้ไลบรารีข้ามแพลตฟอร์มของฉัน (เช่นบน JRE) เพื่อดำเนินการในลักษณะที่ปลอดภัยต่อเธรดในการอ้างอิงวัตถุเพื่อให้ front-end ดั้งเดิมบนแพลตฟอร์มอื่นสามารถสังเกตวัตถุและใช้ประโยชน์จากรูปแบบที่สังเกตได้

พื้นหลังเล็กน้อย - มีแนวคิดเกี่ยวกับการเชื่อมโยงข้อมูลที่ใช้ในกรอบงานส่วนหน้า ใน C # และ Java สิ่งนี้เกี่ยวข้องกับลักษณะที่สังเกตได้ซึ่งให้คลาสความสามารถในการเริ่มเหตุการณ์เมื่อมีการเปลี่ยนแปลงเกิดขึ้นซึ่งตัวควบคุมหลายตัวหรือ "ผู้สังเกตการณ์" อาจสมัครสมาชิก วิธีนี้ผู้สังเกตการณ์ไม่จำเป็นต้องทำการสำรวจ / อ่านทรัพยากรเปรียบเทียบกับการปรับปรุง

ฉันต้องการทำงานกับเครื่องมือวิเคราะห์ที่เปลี่ยนแปลงรายการข้อมูลเมื่อเวลาผ่านไป มันจะเป็นการดีที่จะสามารถให้ front-end สามารถสังเกตรายการเหล่านี้ได้ในขณะที่การวิเคราะห์กำลังทำงานอยู่ สำหรับฉันดูเหมือนว่าสิ่งนี้จะต้องใช้ส่วนหน้าเพื่อให้สามารถส่งวัตถุไปยังเครื่องมือวิเคราะห์ที่เขียนในห้องสมุดที่หวังว่าจะเป็นแบบข้ามแพลตฟอร์มและสามารถทำให้เธรดปลอดภัยอ่านวัตถุนั้นได้ มิฉะนั้นให้ห้องสมุดปฏิบัติตามสัญญาที่สังเกตได้

วิธีนี้ถูกจัดการในเอ็นจิน CLI สไตล์เก่าของ Unix คือการใช้ stdin / stdout / stderr และมีการอัพเดท post engine เป็นระยะ สิ่งนี้ต้องมีค่าใช้จ่ายมาตรฐานและการแยกวิเคราะห์ข้อความที่ฉันค่อนข้างจะหลีกเลี่ยงถ้าเป็นไปได้


2
โดยทั่วไปแล้วดีที่สุดที่จะทำให้คำถามหลักแคบลงเล็กน้อยกว่า "เป็นไปได้ X หรือไม่" เนื่องจากคำตอบที่ถูกต้องสำหรับคำถามนั้นมักจะเป็น "ใช่ถ้าคุณพยายามอย่างหนักพอ" ดูเหมือนว่าคุณต้องการถามว่า "ฉันจะทำ X อย่างไรโดยไม่มีค่าใช้จ่ายของ stdin / stdout" ในกรณีใดทำไมไม่เพียงแค่ใช้ไลบรารีที่เชื่อมโยงแบบสแตติกหรือแบบไดนามิก? คุณต้องการห้องสมุดนี้เป็นโปรแกรมแยกต่างหากจาก UI ด้วยเหตุผลบางอย่าง?
Ixrec

ขอบคุณ Ixrec คุณคิดว่าฉันใช้ถ้อยคำตามที่คุณแนะนำในชื่อของฉันหรือไม่? เหตุผลที่ฉันต้องการให้ไลบรารี่เป็นแบบพกพาและ front-end เป็นเนทิฟเพราะฉันคิดว่าเฟรมเวิร์ค UI ดั้งเดิมทำงานได้ดีกว่า (เตือนความเห็น!) แต่ฉันไม่ต้องการเขียนตรรกะของเครื่องยนต์สองครั้ง .
Brandon Arnold

เหตุใดห้องสมุดที่เชื่อมโยงแบบคงที่หรือแบบไดนามิกไม่สามารถพกพาได้ Re: ชื่อหนังสือเป็นตัวอย่างของคำถามที่ "กว้างเกินไป" ฉันไม่ได้มุ่งเน้นไปที่สิ่งนั้นเพราะดูเหมือนจะมีคำถามเฉพาะเจาะจงในคำถามที่เหลือของคุณ
Ixrec

@Ixrec มันสามารถ คำถามถือว่าเป็นห้องสมุดซึ่งรวมถึงความเป็นไปได้เหล่านั้น ฉันต้องการตรวจสอบให้แน่ใจว่าแอปพลิเคชันใด ๆ ที่ใช้ไลบรารีนี้จะสามารถสังเกตการอ้างอิงไปยังวัตถุที่ส่งไปยังแบบอะซิงโครนัสในขณะที่กำลังดำเนินการอยู่
Brandon Arnold

1
@Ixrec ฉันได้อัปเดตชื่อให้กว้างน้อยลง
แบรนดอนอาร์โนลด์

คำตอบ:


1

คุณสามารถสร้างเทียร์การรวมเหนือโมเดลไลบรารีของคุณโดยใช้ (ตัวอย่าง) เฟรมเวิร์กการรวมอูเพนอูฐ องค์ประกอบ Netty อาจเหมาะสมกับความต้องการของคุณ ด้วยรูปแบบที่สังเกตได้เทียร์การรวมของคุณควรเปลี่ยนการเปลี่ยนแปลงที่ได้รับจากแบบจำลองของคุณและแจ้งให้พวกเขาทราบต่อสมาชิกส่วนหน้า อีกวิธีที่คล้ายกันในการตีความความต้องการของคุณคือคิดถึงสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่งเมื่อแบบจำลองของคุณเปลี่ยนแปลงผู้ฟังผู้สังเกตการณ์ในระดับการรวมของคุณจะเผยแพร่ข้อความในหัวข้อ JMS เพื่อให้ตัวเชื่อมต่อย่อยในส่วนหน้าจะได้รับ


0

ฉันเขียนคำตอบที่แตกต่างไปอย่างสิ้นเชิงโดยบอกว่าผู้จัดพิมพ์ของคุณเขียนอัปเดตไปยังคิวหรือไปป์ แต่ฉันก็อ่านคำถามอีกครั้ง

ถ้าฉันเข้าใจถูกต้องคำถามทั่วไปของคุณคือคุณต้องการเขียนไลบรารี่ให้ทำงานใน JRE ซึ่งฟรอนต์เอนด์เนทีฟสามารถสืบค้นสถานะของวัตถุ Java ในลักษณะที่ปลอดภัยต่อเธรด

สิ่งนี้กว้างอย่างไม่น่าเชื่อเนื่องจากมีหลายร้อยวิธีที่ Front-End สามารถโต้ตอบกับโค้ดไลบรารีที่รันใน JRE - JNI, EJB RPC, อินเตอร์เฟส HTTP สไตล์ RPC, การตอบสนองคำขอผ่านคิวข้อความ ฯลฯ

ไม่ว่าคุณจะเลือกแบบไหนในบางช่วงของโซ่ควรมีการเรียกเมธอด Java และนั่นคือสิ่งที่คุณจะต้องควบคุมความปลอดภัยของเธรด ที่นั่นคุณมีคลังแสงทั้งหมดของเครื่องมือความปลอดภัยด้ายที่จำหน่ายของคุณ คุณสามารถซิงโครไนซ์คุณสามารถส่งคืนสำเนาการป้องกันทำงานกับข้อมูลแคช ฯลฯ

อย่างไรก็ตามพิจารณาว่าเป็นรุ่นที่คุณต้องการติดตามหรือไม่ การย้ายไปที่โมเดล "ไม่ต้องถามฉันฉันจะบอกคุณ" ซึ่งห้องสมุดของคุณผลักดันการอัปเดตไปยังส่วนหน้าซึ่งมีข้อมูลเพียงพอที่ไม่จำเป็นต้องสืบค้นวัตถุ


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