2011-02-08 5 views
8

Estoy usando javaeventing para escribir un intérprete de comandos par para acceder a una base de datos. Por lo tanto, mi caso de uso es:Java y programación impulsada por eventos

  1. abrir el shell en la línea de comandos.
  2. Ahora, el shell se conecta a la base de datos y escucha el comando entrante.
  3. cuando recibe un comando, lo ejecuta y devuelve el resultado requerido.

Ahora, ¿cómo puedo evitar while(!exit){ //do stuff } tipo de bucle aquí? ¿Cómo usar eventos de Java correctamente?

El camino a seguir recto puede ser:

while(!exit) 
{ 
    exit = myClass.execute("command"); //when command is exit, return true. 
} 

Pero, estoy buscando si el concurso completo de Java puede dar una mejor solución.

Update1:

Esto es lo que estoy tratando de poner en práctica:

  1. Mi aplicación es un shell (como consola MongoDB) para probar una base de datos clave-valor.
  2. El código simple:

init(); //Initialize the connection with database
while(!exit) {
//exit = myClass.execute("put(5)"); //This returns false
exit = myClass.execute("exit"); //returns true, i.e. the user wants to exit the shell
}

Ahora, aquí no veo el uso de concurso completo de java y me resolvió mi problema, puede por favor decirme, CÓMO java eventi ng vendrá en la imagen aquí? Quiero que el usuario active el evento.

+0

Tal vez estoy mal entendido su pregunta, pero no es exactamente lo que este concurso completo es para? Usted registra su evento, aquí para salir, y cuando ocurre, se llama su código. Entonces no debería haber necesidad de escribir un bucle como ese. Por favor corrígeme si estoy afuera en el jardín izquierdo. –

+0

sí, tienes razón. Pero no soy capaz de descubrir, ¿cómo lograr eso? – zengr

Respuesta

2

Me resulta difícil entender lo que estás tratando de hacer exactamente, pero tengo experiencia con javaEventing, e intentaré ayudarte lo mejor que pueda. Will Hartung está en lo cierto, necesitas crear tus eventos en algún lado.Entonces, si lo entiendo correctamente, desea iniciar su aplicación java desde la línea de comandos, luego desea conectarse a una base de datos y observar si se inserta algún comando, y cuando se inserta, desea crear un evento. ¿Es esto correcto?

En ese caso, es probable que deba realizar un sondeo en la base de datos, porque las bases de datos comunes no tienen forma de notificar su aplicación cuando alguna condición es verdadera. Esto significa que probablemente necesite la cláusula {}, en la que realiza consultas en la base de datos, esperando un conjunto de resultados que contenga el comando que está buscando. Cuando se encuentran, se podría crear un evento como este:

Class ReceivedCommandEvent extends EventManager.EventObject {} // define your event 

while (command==null) { 
    command = pollDataBaseForCommand(); //poll your databae for commands 
    waitForSomePeriod(); 
} 

EventManager.triggerEvent(this, new ReceivedCommandEvent(command));  //trigger your event, with the command as payload 

Ahora, los otros hilos de escucha para su evento (la ReceivedCommandEvent) recibirán el evento, y se puede recuperar el comando de la carga de evento.

Ahora, la pregunta es, ¿por qué quieres utilizar la base de datos para comunicar comandos de todos modos? ¿Simplemente lo usa para comunicarse entre aplicaciones? Si su otra aplicación también está escrita en Java, podría considerar el uso de eventos distribuidos, permitiendo que una aplicación java envíe eventos a aplicaciones Java que se ejecutan en otras JVM en otras máquinas de la red. Es posible que desee ver JED (http://code.google.com/p/jed-java-event-distribution), que hace exactamente eso.

espero que esto ayude, Bob

2

Todo lo que hace la biblioteca de eventos es enviar eventos a los oyentes. Más allá de eso, necesitas algo para CREAR realmente los eventos.

En este caso, necesitaría un código para leer la consola y generar eventos, necesitaría potencialmente algo más para "escuchar" la base de datos y generar eventos a partir de eso (suponiendo que tiene eventos DB asíncronos que está buscando , como cambios de tabla o fila).

Ese código todavía necesita ser escrito.

Y a menos que ese marco le proporcione tales clases de utilidad, tendrá que escribirlo usted mismo, y esas clases serán probablemente como usted describe.

Pero esas clases están todas en el borde del sistema, manejando los datos. El resto de tu código puede ser completamente basado en eventos.

Cuestiones relacionadas