Чи підтримують класи в бібліотеці JRE спостережувані та / або асинхронні зчитування із зовнішніх / не-JRE-зборів?


12

Як я можу реалізувати свою міжплатформенну бібліотеку (наприклад, на JRE) для роботи в безпеці для потоків на посиланнях на об'єкти, щоб натільні передні кінці на інших платформах могли спостерігати за об'єктом та використовувати переваги спостережуваних шаблонів?

Невеликий фон - існує концепція прив'язки даних, що використовується в більшості фронтальних рамок. У C # та Java це пов'язано з ознакою спостерігається, що дає класу можливість запускати події, коли відбуваються зміни, на які можуть підписатися кілька елементів керування або «спостерігачі». Таким чином, спостерігачам не потрібно тримати опитування / читання ресурсу, порівнюючи оновлення.

Я хочу працювати над механізмом аналізу, який вносить зміни в списки даних з часом. Було б непогано мати можливість, щоб фронт-енд міг спостерігати за цими списками під час аналізу. Мені здається, що це потребує того, щоб передній кінець мав змогу передавати об’єкт в механізм аналізу, написаний у бібліотеці, який, сподіваємось, є кросплатформенним, і мати змогу зробити безпечні для потоку читання цьому об’єкту. Або ж, чи повинні бібліотека виконувати договори на дотримання.

Як це вирішується в старих CLI-системах Unix - це використовувати stdin / stdout / stderr і регулярно оновлювати двигун. Для цього потрібен стандартний накладний і текстовий аналіз, якого я б скоріше уникав, якщо це можливо.


2
Як правило, найкраще зробити основне питання трохи вужчим, ніж "Чи можливо X?", Оскільки правильна відповідь на це майже завжди "Так, якщо ви постараєтеся досить сильно". Здається, ви насправді хочете запитати "Як я можу зробити X без накладних витрат stdin / stdout?" У такому випадку чому б просто не використати статично або динамічно пов'язану бібліотеку? Чи потрібна вам ця бібліотека, щоб вона чомусь була окремою програмою від інтерфейсу?
Ixrec

Спасибі, Іксрек. Як ви думаєте, я поставив це так, як ви пропонуєте в моєму заголовку? Причиною я хотів би, щоб бібліотека була портативною, а фронт був рідним, тому що я думаю, що вбудовані інтерфейси інтерфейсу зазвичай працюють краще (попередження думки!), Але я не хочу двічі писати логіку двигуна .
Брендон Арнольд

Чому статична або динамічно пов'язана бібліотека не може бути портативною? Re: Заголовок, ось приклад підручника "занадто широкого" питання; Я не зосереджувався на цьому, тому що в решті запитань виявилося більш конкретних питань.
Іксрек

@Ixrec Це може. Питання передбачає, що це бібліотека, яка включає ці можливості. Я хотів би переконатися, що будь-які додатки, які споживають цю бібліотеку, зможуть спостерігати посилання на об'єкти, які передаються їй асинхронно, під час роботи з ними.
Брендон Арнольд

1
@Ixrec Я оновив заголовок, щоб бути менш широким
Брендон Арнольд,

Відповіді:


1

Ви можете створити рівень інтеграції над моделлю вашої бібліотеки, використовуючи (наприклад) рамку інтеграції верблюда apache. Компонент Netty, ймовірно, може відповідати вашим потребам. З оглядовим шаблоном рівень інтеграції повинен трансформувати отримані зміни вашої моделі та повідомляти про них переднім абонентам. Ще один подібний спосіб інтерпретації вашої вимоги - подумати про архітектуру, керовану подіями, де, коли ваша модель зміниться, слухачі спостерігачів у вашому інтеграційному ярусі публікують повідомлення в темі JMS, тому підключені підписники в передній частині отримають їх.


0

Я написав зовсім іншу відповідь, запропонувавши, щоб ваш видавець писав оновлення в чергу чи трубу - але я потім перечитав питання.

Якщо я правильно розумію, ваше загальне питання полягає в тому, що ви хочете написати бібліотеку для запуску в JRE, в якій нативний фронт-енд може запитувати стан об'єктів Java безпечним способом.

Це неймовірно широко, тому що існує сотні способів, як фронт-енд може взаємодіяти з кодом бібліотеки, що працює в JRE - JNI, EJB RPC, HTTP-інтерфейси у стилі RPC, запит-відповідь через черги повідомлень тощо.

Що б ви не вибрали, в якийсь момент ланцюга повинен бути виклик методу Java, і саме там ви можете взяти під контроль безпеку потоку. Там у вашому розпорядженні весь арсенал інструментів для безпеки різьби. Ви можете синхронізувати, ви можете повернути захисні копії, працювати з кешованими даними тощо.

Однак врахуйте, чи це модель, яку ви хочете наслідувати. Можливо, більш чітко перейти до моделі "не запитай мене, я скажу тобі", коли ваша бібліотека надсилає оновлення до передньої частини, що містить достатню інформацію, що їй не потрібно запитувати об'єкти.


Додатковий коментар - чи розглядали ви, як використовувати Redis (або подібний) як посередника між передньою та задньою частинами?
струнка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.