¿Cómo puedo implementar mi biblioteca multiplataforma (por ejemplo, en JRE) para que funcione de manera segura en las referencias de objetos, de modo que los front-end nativos en otras plataformas puedan observar el objeto y aprovechar los patrones Observables?
Un poco de historia: hay un concepto de enlace de datos utilizado en la mayoría de los marcos de aplicaciones para usuario. En C # y Java esto está relacionado con el rasgo Observable que le da a una clase la capacidad de disparar eventos cuando ocurren cambios, a los que pueden suscribirse múltiples controles u "observadores". De esta manera, los observadores no tienen que seguir sondeando / leyendo el recurso, comparando las actualizaciones.
Quiero trabajar en un motor de análisis que realice cambios en las listas de datos a lo largo del tiempo. Sería bueno poder hacer que el front-end pueda observar estas listas mientras se ejecuta el análisis. Me parece que esto requeriría que el front-end pueda pasar un objeto al motor de análisis, escrito en una biblioteca que, con suerte, es multiplataforma, y poder realizar lecturas seguras de ese objeto. O bien, haga que la biblioteca satisfaga los contratos de observabilidad.
La forma en que esto se maneja en los motores CLI de estilo Unix más antiguos es usar stdin / stdout / stderr, y hacer que el motor publique actualizaciones en intervalos regulares. Esto requiere gastos generales estándar y análisis de texto que preferiría evitar, si es posible.
fuente
Respuestas:
Puede crear un nivel de integración sobre el modelo de su biblioteca utilizando (por ejemplo) el marco de integración apache camel. El componente Netty probablemente podría satisfacer sus necesidades. Con un patrón observable, su nivel de integración debe transformar los cambios recibidos de su modelo y notificarlos a los suscriptores front-end. Otra forma similar de interpretar su requerimiento es pensar en una arquitectura basada en eventos donde, cuando cambia su modelo, los oyentes observadores en su nivel de integración publican un mensaje en un tema JMS para que los suscriptores conectados en los front-end los reciban.
fuente
Escribí una respuesta completamente diferente, sugiriendo que su editor escriba actualizaciones en una cola o una tubería, pero luego releí la pregunta.
Si entiendo bien, su pregunta general es que desea escribir una biblioteca para ejecutar en el JRE, en la que un front-end nativo puede consultar el estado de los objetos Java de una manera segura para subprocesos.
Esto es increíblemente amplio porque hay cientos de formas en que un front-end puede interactuar con el código de la biblioteca que se ejecuta en un JRE: JNI, EJB RPC, interfaces HTTP de estilo RPC, solicitud-respuesta sobre colas de mensajes, etc.
Sin embargo, cualquiera que elija, en algún momento de la cadena, debería haber una llamada al método Java, y ahí es donde puede tomar el control de la seguridad de los subprocesos. Allí, tiene todo el arsenal de herramientas de seguridad de hilos a su disposición. Puede sincronizar, puede devolver copias defensivas, trabajar con datos en caché, etc.
Sin embargo, considere si este es el modelo que desea seguir. Puede ser más limpio pasar a un modelo de "no me preguntes, te lo diré", en el que tu biblioteca envía actualizaciones al front-end que contiene información suficiente que no necesita consultar los objetos.
fuente