Arquitetura

Esta é uma visão geral da arquitetura do JxBrowser.

Visão geral

A arquitetura da biblioteca JxBrowser consiste em vários processos, como o processo de aplicação Java e diferentes processos Chromium:

jxbrowser-architecture-diagram Java Process Java App Chromium GPU JxBrowser BrowserView Swing SWT JavaFX Engine Profile Browser Frame Chromium Main Engine Profile Browser Chromium Renderer Frame DOM JS Frame DOM JS DOM JS Frame DOM JS IPC Chromium IPC Chromium IPC Chromium IPC IPC IPC

As seções seguintes fornecem detalhes sobre cada um dos processos, os principais componentes da biblioteca e descrevem o seu funcionamento.

Processos

Java

Este é um processo Java padrão onde a sua aplicação Java é executada. Aqui trabalha-se com a API JxBrowser para inicializar o Engine, acessar o Profile predefinido, criar as instâncias do Browser, carregar páginas Web, acessar ao DOM de Frame, executar JavaScript, incorporar BrowserView na sua aplicação desktop Java Swing, JavaFX ou SWT para apresentar o conteúdo das páginas Web carregadas, etc.

Chromium

O Chromium utiliza a Arquitetura Multi-Processo e executa vários processos. Cada processo tem o seu próprio tipo e objetivo. Abaixo encontra-se uma descrição dos tipos de processos básicos.

O Chromium decide quantos processos devem ser iniciados. Ele pode executar processos adicionais para a sua funcionalidade interna, plugins, extensões, utilitários, etc.

Principal

Este processo é iniciado pelo JxBrowser quando você criar Engine. É o processo principal que gere o ciclo de vida de outros processos do Chromium. Se você terminar este processo, todos os outros processos Chromium produzidos por este também serão terminados.

Para cada instância do Engine é lançado um processo separado do Chromium Main.

Renderizador

Nesse processo, as instâncias Frame que gerenciam o DOM e o JavaScript da página web carregada são executadas. O processo é iniciado pelo Chromium engine quando se navega no Browser para uma página Web com um domínio diferente.

Por padrão, cada processo do Renderer é executado em Sandbox, pelo que não pode utilizar diretamente o seu disco, rede ou tela.

GPU

Neste processo, o conteúdo das páginas Web carregadas em diferentes processos do Chromium Renderer é processado pelo Chromium utilizando a GPU.

Comunicação entre processos

A comunicação entre diferentes processos é efetuada através da comunicação inter-processos (IPC). O IPC transfere dados entre dois processos numa máquina local.

Para transferir dados entre os processos Java e Chromium, o JxBrowser utiliza a sua própria implementação IPC baseada em sockets e memória compartilhada. A comunicação entre os processos Chromium é efetuada através da implementação Chromium IPC.

Componentes principais

Engine

Gerencia o ciclo de vida do processo principal do Chromium e fornece acesso à funcionalidade central do Chromium que permite gerenciar perfis, acessar a todos os dispositivos de entrada de multimídia disponíveis, etc.

Para trabalhar com o engine, utilize a classe Engine. É um objeto de nível superior na hierarquia de objetos da biblioteca. O trabalho com a biblioteca começa com a criação de uma instância Engine.

Para instruções detalhadas sobre a criação e utilização da instância Engine ver o guia Engine.

Profile

Representa um perfil Chromium. Permite guardar separadamente todos os dados do navegador, como o histórico, os cookies, a cache, as definições de proxy, as configurações do corretor ortográfico, etc. Cada Engine tem um perfil padrão que é criado automaticamente durante a inicialização do Engine. O perfil padrão não pode ser excluído.

Você pode criar novos perfis e excluí-los se não forem necessários, utilizando o serviço Profiles.

Os arquivos do perfil para histórico, cookies, cache, etc. são armazenados no diretório de dados do usuário. Se você configurar o Engine com o diretório de dados do usuário e criar um perfil, este será armazenado no diretório de dados do usuário e será restaurado após o reinício da aplicação.

Leia mais sobre perfis no guia Profile.

Browser

Trata-se de um controle de navegador Web responsável por carregar páginas Web ou arquivos HTML locais, encontrar texto na página Web carregada, modificar o zoom, trabalhar com áudio, obter notificações sobre o progresso do carregamento, enviar eventos de teclado e mouse e muito mais.

Para trabalhar com este controle utilize a classe Browser. Cada instância de Browser pertence a Profile. A instância Browser é fechada automaticamente se o seu Profile for excluído ou se a sua instância Engine for fechada ou tiver uma falha.

O guia Browser fornece detalhes sobre como criar e utilizar o Browser.

Frame

Cada página web carregada no Browser tem um Frame principal. O próprio Frame pode ter frames filhos. Você pode utilizar Frame para acessar e trabalhar com DOM e JavaScript. Quando uma página web é descarregada, seu Frame e todos os frames filhos são fechados automaticamente.

Como funciona

Criando o Engine

Quando se cria uma instância Engine, a biblioteca executa as seguintes ações:

  1. Iniciar os processos Chromium Main e GPU.
  2. Inicializa o Chromium engine no processo principal do Chromium.
  3. Inicializar o perfil padrão.
  4. Configurar a ligação IPC entre Java e o processo principal do Chromium.
run-engine Java App Engine Chromium Main Engine Chromium GPU IPC Channel Chromium IPC

Se você criar duas instâncias do Engine, processos Chromium Main e GPU separados serão iniciados para cada instância. Por exemplo:

run-engines Java App Engine Engine Chromium Main Engine Chromium GPU Chromium Main Engine Chromium GPU IPC Channel IPC Channel Chromium IPC Chromium IPC

Criando o Browser

Quando se cria uma instância Browser, a biblioteca carrega automaticamente uma página web about:blank. Isso leva à criação do processo Chromium Renderer onde o DOM e o JavaScript desta página Web estão sendo executados:

run-browser Java App Engine Profile Browser Frame about:blank DOM JS Chromium Main Engine Profile Browser Chromium Renderer Frame about:blank DOM JS Chromium GPU IPC Channel IPC Channel Chromium IPC Chromium IPC

Se você navegar na instância Browser para uma página web, a página será carregada neste processo Chromium Renderer. Se depois você carregar uma página Web com um domínio diferente, esta será carregada num novo processo Chromium Renderer que será iniciado automaticamente. E o processo Chromium Renderer criado para a página Web anterior será encerrado.

Se uma página web tem um IFRAME com uma página web de outro domínio, o Chromium irá executar um processo Renderer separado para este frame remoto.

Fechando o Browser

Quando se fecha a instância do Browser, o processo correspondente do Chromium Renderer é terminado automaticamente. Isso significa que todas as instâncias Frame em execução no processo encerrado serão automaticamente fechadas também:

run-engine-2 Java App Engine Chromium Main Engine Chromium GPU IPC Channel Chromium IPC

Encerrando o Engine

Quando se fecha o Engine, a biblioteca executa as seguintes ações:

  1. Fechar a ligação IPC entre Java e os processos principais do Chromium.
  2. Eliminar o Chromium engine no processo principal do Chromium.
  3. Terminar os processos Chromium Main e GPU.
Go Top