2012-09-12 24 views
5

Tengo un proyecto específico que debo llevar a cabo y me gustaría obtener orientación de los maestros antes de dar el primer paso.Flujo de proceso/trabajo en Java

Tenemos una serie de aplicaciones que recibe entradas de algunas fuentes externas (es decir, archivos, XML-RPC, servicio web, etc.), luego las procesa de alguna manera, aplicando reglas para comunicarse con otros sistemas externos (posiblemente), acceder a una base de datos (tal vez) y luego devolver una respuesta. Mantenemos diferentes versiones de la misma aplicación para atender todas las pequeñas diferencias entre nuestros clientes. (Sí, sí, lo sé. Es terrible, es por eso que quiero arreglarlo ...)

La idea con la que estoy jugando es tener una arquitectura basada en componentes donde diferentes componentes se pueden conectar juntos a través de la configuración y la el flujo de información se rige por reglas comerciales. En esencia, debe ser posible dar a cada cliente una copia del programa con un conjunto diferente de configuraciones. Incluso estoy soñando con una aplicación basada en GUI donde un sistema se puede conectar en una moda de arrastrar y soltar estilo VB.

Ahora, lo anterior suena definitivamente como algo que se ha hecho antes ... y no quiero reinventar la rueda. El problema es que lo anterior tiene que ser capaz de manejar grandes volúmenes de transacciones en tiempo real, por lo que no estoy seguro de si algo como BPEL será la elección correcta.

¿Alguna recomendación antes de ir y hacer la rueda más redonda?

+2

Parece que está buscando algunas herramientas de ETL; búsqueda de talend o apatar. – SiB

Respuesta

1

Escribiría un dialecto XML muy simple para su aplicación. Mantenga los tipos de elementos al mínimo y use los atributos class="my.class.name' para compilar las instancias de clase correctas en tiempo de ejecución. Esto hace que sea fácil tener, por ejemplo, un elemento con 3 implementaciones (por ejemplo, <source class="my.package.XmlRpc">, <source class="my.package.LocalFile"> y <source class="my.package.WebService">). Cada tipo de elemento, una vez instanciado, debe leer su contenido XML para encontrar cualquier dato adicional que necesite para configurarse correctamente.

Hay muchas bibliotecas de análisis XML fáciles de usar (recomiendo JDom), y hay una gran cantidad de herramientas de soporte para la visualización y edición de XML. XML es fácil de documentar, trabajar y envolver en GUI.

Entonces: cada componente recibe un tipo de elemento, y sus configuraciones específicas dependientes de la implementación están ocultas dentro de los elementos. Si tiene un cableado simple (las instancias de componentes específicos solo se usan en un solo lugar), puede salirse con la suya. Si tiene un cableado complejo (necesita reutilizar las instancias de los componentes en varios lugares, por ejemplo, desea reutilizar filtros o calcular resultados intermedios), primero define las instancias de los componentes y luego construye el cableado de las referencias a estos instancias.

Estoy esencialmente defendiendo algo así como Ant build-files, y para mantener las cosas lo más simple posible.

+0

Esto es lo que estaba pensando ... y agregando anotaciones para el flujo de entrada/salida entre las clases. Sin embargo, esperaba que ya hubiera algo probado y probado. (pero +1 solo porque realmente realmente me gustaría hacer esto y lo confirmas :)) –

+1

Si conoces un poco de XML y reflexión, entonces puedo garantizar que esto será mucho más rápido que tratar de encontrar uno -toda la solución para todos y adaptándola para trabajar con su problema. – tucuxi

+0

Estoy bastante familiarizado con ambos ... lo suficientemente familiar como para saber su malvado lado oscuro. Probablemente miraría algo así como Guice para hacer la creación de objetos para mí en lugar de la introspección. –

Cuestiones relacionadas