2011-11-10 17 views
10

Quiero acceder a un archivo de registro que está bloqueado por una aplicación de Java de terceros. El archivo está bloqueado durante todo el día y se lanzará al día siguiente. Sin embargo, mi objetivo es leerlo ahora usando RandomAccessFile (debo usar esta clase porque necesito comenzar/almacenar la última posición mientras leo) sin esperar hasta mañana.Lectura de un archivo de registro que está bloqueado por otra aplicación

Actualmente, puedo leer el registro solo si lo desbloqueo con un programa de desbloqueo de archivos. ¿Alguien puede sugerir algún jar/utilities que pueda usar en mi programa Java para cumplir mi objetivo?

+3

Un poco similar a su problema? http://stackoverflow.com/questions/1555883/locking-and-unlocking-files-using-the-java-api Aunque la solución provista no es muy elegante, funcionará por el momento. – darnir

+1

Además, ¿puede identificar qué aplicación está bloqueando su archivo de registro? ¿Es una aplicación externa de terceros? ¿O alguna otra pieza de tu propio código? Si es su propio código en alguna parte, esto podría ser de alguna ayuda: http://www.javaspecialists.eu/archive/Issue190.html – darnir

+1

Otro problema similar: http: // stackoverflow.com/questions/5680588/in-java-is-there-a-way-to-read-a-file-when-that-file-is-locked-by-other-thread –

Respuesta

2

Suponiendo que está utilizando un sistema operativo de Microsoft:
El software está utilizando Shadow Copy usando (VSS) para copiar archivos bloqueados de Microsoft. Puede utilizar el software desde Java Runtime Environment o quizás utilizar el VSS-API usted mismo a través del Java Native Interface.

Mi enfoque sería el archivo y luego acceder al contenido a través de su copia. La desventaja es que posiblemente esté leyendo información obsoleta si el archivo se ha actualizado desde su operación de copia.

Sin embargo, esto es sólo una suposición, ya que no estoy familiarizado con este tema.

+0

Estoy de acuerdo con usted, esto puede resolver mi objetivo solo si el archivo es pequeño. Sin embargo, copiar un archivo grande no es una buena idea cada 3 segundos. Por eso estoy usando RandamAccessFile solo para acceder a la ubicación específica en el archivo. –

+0

@JoeIjam: el VSS usa copiar-en-escribir, por lo que solo escribe un poco de información del encabezado. El contenido del archivo no se copia hasta que se escribe uno de los archivos, y solo se copian las áreas modificadas. Aun así, usar copias ocultas para esto es una exageración completa. Es mejor romper el bloqueo del proceso original, aunque sea desagradable. –

1

Puede bloquear/desbloquear archivos y carpetas en Java pero solo mediante una aplicación que los bloqueó (programó). Sin embargo, no hay ningún método/clase Java que pueda desbloquear el archivo utilizado por otro proceso.

Debe agrupar su aplicación con otro software (nativo). Por ejemplo, podría crear un script de shell para sistemas Linux y ejecutarlo. En la aplicación Java detectar en qué sistema operativo se está ejecutando para que pueda ejecutar el script/software adecuado.

Cuando la aplicación requiere bloqueo RW, el sistema debe garantizar que nadie más tenga derechos para modificarlo, por lo que debe eliminar el proceso que lo está utilizando.

Si usted tiene acceso al código fuente de esa tercera parte de aplicaciones Java (ese archivo es en realidad el bloqueo que necesita), entonces se podría aplicar lado del servidor que escuche las solicitudes de desbloqueo de archivos y aprobación para el bloqueo de nuevo otra vez .

En mi opinión, un mejor enfoque sería transferir el archivo de esa aplicación al suyo, luego haga lo que quiera y la aplicación de terceros se puede ejecutar sin interrupción (no debería ser notorio). Si necesita modificarlo, entonces el 3er debe esperar, su modificación y devolver una versión actualizada, 3ra continúa trabajando.

1

No veo ninguna herramienta confiable para hacer tal trabajo, mi primer objetivo es tratar de evitar el bloqueo mientras expongo el archivo como un servicio a través de cualquier servlet o cualquier otro mecanismo. El servlet lee el archivo una vez y luego entregar su contenido como texto plano (o corriente) ... No más la contención de bloqueo

HTH Jerome

Cuestiones relacionadas