Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Transações com Sistemas de Arquivos Usando XADisk

Introdução ao XADisk

Nitin Verma, Computer Scientist, Adobe Systems
Nitin Verma é desenvolvedor de JavaEE na Adobe Systems. Anteriormente, ele trabalhou na Oracle e contribuiu para Adaptadores JCA do Oracle SOA Suite. XADisk teve início devido a seu amor por JCA e XA. Nitin se formou no IIT em Ciência da Computação e Engenharia.

Resumo:  Historicamente, os desenvolvedores de aplicativos Java™ , que armazenam seus dados parciais em arquivos, podem se beneficiar de muitas maneiras acessando sistemas de arquivos usando transações. Saiba como trabalhar com o software livre XADisk para acesso a arquivos transitórios.

Data:  05/Jan/2012
Nível:  Introdutório Também disponível em :   Inglês
Atividade:  848 visualizações
Comentários:  


Introdução

Muitos aplicativos Java, incluindo os do lado do servidor e de desktop, mantêm seus dados críticos em sistemas de arquivos, bancos de dados e outros sistemas de informações. Para interação segura e robusta com esses dados cruciais, os desenvolvedores de aplicativos frequentemente procuram acesso transitório para esses sistemas de informações. Uma transação típica fornece as bem conhecidas propriedades de ACID , atomicidade, consistência, isolamento e durabilidade.

Os bancos de dados mais atuais têm suporte para transações. Para sistemas de arquivos, essa funcionalidade está indisponível ou é difícil de integrar com aplicativos Java. Torna-se impossível ou muito difícil associar uma transação a uma cadeia de caractere de operações de arquivos/diretórios. Sem transações, há riscos como resultados inesperados durante o travamento de aplicativos, acesso simultâneo ao mesmo conjunto de dados e mudanças parciais estando visíveis, etc.

Este artigo apresenta XADisk, um software livre de sistema de transações abrangente que permite acesso transacional a sistemas de arquivos de aplicativos Java e JavaEE. Com algumas APIs simples, é possível implementar XADisk sobre qualquer JVM sem requerer qualquer instalação no S.O. Uma vez implementados, aplicativos chamam as APIs do XADisk para executarem várias operações de E/S de arquivos dentro das transações.

XADisk fornece muitos outros recursos, como transações XA, conformidade total com JCA, sistema de mensagens de entrada e outros. Esses recursos estão fora do nível de introdução deste artigo.


Básico de XADisk

Considere XADisk como uma camada entre aplicativos e sistemas de arquivos. XADisk não é uma implementação de sistema de arquivos em si; pode trabalhar com vários sistemas de arquivos (por exemplo, NTFS, FAT, ext3) e permitir que aplicativos acessem esses sistemas de arquivos de forma transitória. Aplicativos chamam APIs do XADisk para executarem várias operações de E/S e são capazes de confirmar ou retroceder todas elas como uma única transação.

XADisk foi escrito em Java e é executado em Java 5 ou acima. Pode ser usado por todos os tipos de aplicativos Java, aplicativos da web em execução em servidores Java, como o Apache Tomcat, e aplicativos JavaEE em execução em servidores JavaEE, etc.

Para um exemplo simples do uso de XADisk, considere um aplicativo Java. Esse aplicativo deseja criar um novo arquivo chamado F1, grave alguns dados nele de outro arquivo chamado F2 e, em seguida, exclua o F2. Essas três operações podem ser executadas dentro de uma única transação usando XADisk com garantias típicas das propriedades de ACID anteriormente mencionadas. XADisk manteria essas garantias mesmo se o aplicativo travasse no meio.

XADisk suporta várias operações em arquivos/diretórios:

  • Arquivos— create, delete, move, copy, truncate, read, write, exists, getLength
  • Diretórios— create, delete, move, list children, exists

Ao usar XADisk, um aplicativo e o sistema de arquivos de destino precisam estar na mesma máquina. É possível que um aplicativo chame as APIs de XADisk remotamente da mesma maneira que XADisk implementou na mesma JVM.

O restante deste artigo cobre algumas etapas simples para iniciar o uso de XADisk em qualquer aplicativo Java.


Usando XADisk

Processo de inicialização

Antes de chamar operações de E/S de XADisk, inicialize uma instância XADisk dentro de uma JVM. Na mesma JVM, pode haver diversas instâncias de XADisk; cada instância de XADisk terá seu próprio estado isolado. Este artigo demonstra como inicializar e chamar uma dessas instâncias de XADisk.

Como é possível inicializar XADisk em qualquer JVM, é possível usá-lo em diversos ambientes Java, desde programas Java simples a servidores JavaEE, como JBoss, e servidores da web, como Tomcat.

Para inicializar uma instância de XADisk, o seguinte é necessário no ambiente do sistema:

  1. Java5 ou acima
  2. XADisk.jar (faça download a partir de http://xadisk.java.net/)
  3. JCA 1.5 Jar (faça download a partir de http://download.java.net/maven/1/javax.resource/jars/connector-api-1.5.jar)

Durante a inicialização, XADisk aceita um objeto de configuração para suas várias propriedades de configuração. A maioria das propriedades de configuração tem seus valores padrão configurados. Apenas SystemDirectory e InstanceId são obrigatórias. Como mostra a Listagem 1, o construtor da configuração aceita essas duas propriedades de configuração. SystemDirectory é um diretório no qual XADisk mantém todos os seus artefatos (por exemplo, logs de transações) necessários para seu funcionamento. InstanceId identifica de forma exclusiva uma instância de XADisk em uma JVM.


Listagem 1. Configurar e inicializar uma instância de XADisk
String XADiskSystemDirectory =“/home/systems/XADiskSystem1";
StandaloneFileSystemConfiguration configuration = 
    new StandaloneFileSystemConfiguration(XADiskSystemDirectory, “instance-1”);
XAFileSystem xaf = XAFileSystemProxy.bootNativeXAFileSystem(configuration);
xaf.waitForBootup(10000L);

A cadeia de caractere acima conclui a configuração de uma instância do XADisk e entra em uma espera para que conclua o processo de inicialização. Após a inicialização ser concluída, essa instância de XADisk está disponível para uso por aplicativos na mesma JVM ou em JVMs remotas.

Observe que uma referência do tipo XAFileSystem é o ponto de entrada para iniciar a chamada de operações em uma instância de XADisk. Essa referência de XAFileSystem pode ser obtida:

  1. Durante a inicialização, conforme mostrado na Listagem 1.
  2. Usando o método instanceId a partir de qualquer lugar na JVM, conforme mostrado na Listagem 2.

Listagem 2. Obtendo a referência de XAFileSystem para a instância de XADisk a mesma JVM.
XAFileSystem xaf = XAFileSystemProxy.getNativeXAFileSystemReference(“instance-1”);
            

  1. Por aplicativos remotos, conforme mostrado na A Listagem 3.

Listagem 3. Obtendo a referência de XAFileSystem para a instância de XADisk em uma JVM remota.
XAFileSystem xaf = XAFileSystemProxy.getRemoteXAFileSystemReference("10.30.9.200", 5151);
/*the parameters are the serverAddress and serverPort configuration properties 
used during booting of the remote XADisk instance. Note that remoting to 
an XADisk instance is disabled by default and can be enabled 
using configuration.setEnableRemoteInvocations(true) during bootup*/

Chamando operações de E/S

Agora que a instância de XADisk está pronta, as operações transitórias podem ser iniciadas nos arquivos/diretórios.

Após obter a referência de XAFileSystem , o método de chamar APIs de XADisk permanece o mesmo, independentemente de se a instância de XADisk de destino está em execução na mesma JVM ou em uma remota.

Como as operações de arquivos/diretórios estariam ocorrendo dentro de uma transação, primeiro inicie uma transação criando uma sessão, como mostra a A Listagem 4.


Listagem 4. Criar uma sessão e iniciar uma transação
Session session = xaf.createSessionForLocalTransaction();

Após termos a sessão, as operações de E/S podem ser executadas conforme necessário. As APIs de XADisk para as operações de arquivos/diretórios são diretas. Listagem 5 mostra alguns exemplos.


Listagem 5. Chamar APIs de XADisk para operações de arquivos/diretórios
File f = new File("/testAPIs/test.txt");
if(session.fileExists(f)) {
    XAFileInputStream xis = session.createXAFileInputStream(f);
    for (int i = 0; i < 100; i++) {
        byte a = (byte) xis.read();
        if( a== -1) {
            break;
        }
        System.out.print(a);
     }
    xis.close();
    session.moveFile(f, new File("/testAPIs/test.txt___” + System.currentTimeMillis()));
}
else {
    //use false below to create file, true for directory
    session.createFile(f, false);
     //use false below for tiny write operations, true otherwise
     XAFileOutputStream xafos = session.createXAFileOutputStream(f, false);
     byte[] buffer = new byte[100];
     for (int i = 0; i < 100; i++) {
        buffer[i] = i*i;
     }
     xafos.write(buffer);
     xafos.close();
}
/* You can do more operations here, by calling Session APIs 
for reading/writing/creating/deleting/updating/copying/moving files 
and directories. For details, please see the XADisk JavaDoc for 
interface named XADiskBasicIOOperations.*/

Após concluir todas as operações de E/S, podemos conformar (ou retroceder) a transação com uma chamada simples ao objeto de sessão, conforme mostrado na Listagem 6.


Listagem 6. Confirmar ou retroceder a transação associada à sessão
//commit the transaction
session.commit();
//or rollback the transaction
session.rollback();

para iniciar uma nova transação, crie um novo objeto de Sessão e siga as mesmas etapas mostradas na Listagem 5

Encerrando

É possível encerrar uma instância de XADisk a partir de qualquer lugar na JVM, conforme mostrado na Listagem 7.


Listagem 7. Encerrar uma instância de XADisk a partir da mesma JVM
XAFileSystem xaf = XAFileSystemProxy.getNativeXAFileSystemReference(“instance-1”);
xaf.shutdown();


Conclusão

Aplicativos que mantêm seus dados críticos em sistemas de arquivos podem observar um benefício significativo usando transações com os sistemas de arquivos. XADisk é uma solução de software livre disponível gratuitamente que permite que aplicativos interajam com sistemas de arquivos usando transações. Fornece APIs simples para inicialização, execução de várias operações de arquivos/diretórios e gerenciamento de transações.

XADisk pode fazer muito mais. Visite os links em Recursos para obter informações adicionais, código de amostra e para participar de discussões de tecnologia.


Recursos

Aprender

Obter produtos e tecnologias

  • XADisk home page: Saiba mais sobre XADisk, acesse guias de usuários e obtenha JavaDoc e códigos de amostra.

  • Avalie produtos de software IBM: a partir de downloads de teste para produtos hospedados na nuvem, é possível inovar no seu próximo projeto de desenvolvimento de software livre usando software especialmente para desenvolvedores.

Discutir

Sobre o autor

Nitin Verma é desenvolvedor de JavaEE na Adobe Systems. Anteriormente, ele trabalhou na Oracle e contribuiu para Adaptadores JCA do Oracle SOA Suite. XADisk teve início devido a seu amor por JCA e XA. Nitin se formou no IIT em Ciência da Computação e Engenharia.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Tecnologia Java, Software livre
ArticleID=783681
ArticleTitle=Transações com Sistemas de Arquivos Usando XADisk
publish-date=01052012

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).