List icon Conteúdo

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-diagramJava ProcessJavaAppChromium GPUJxBrowserBrowserViewSwingSWTJavaFXEngineProfileBrowserFrameChromium MainEngineProfileBrowserChromium RendererFrameDOMJSFrameDOMJSDOMJSFrameDOMJSIPCChromium IPCChromiumIPCChromium IPCIPCIPC

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-engineJava AppEngineChromium MainEngineChromium GPUIPCChannelChromium 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-enginesJava AppEngineEngineChromium MainEngineChromium GPUChromium MainEngineChromium GPUIPCChannelIPCChannelChromium IPCChromium 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-browserJava AppEngineProfileBrowserFrameabout:blankDOMJSChromium MainEngineProfileBrowserChromium RendererFrameabout:blankDOMJSChromium GPUIPCChannelIPCChannelChromium IPCChromium 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-2Java AppEngineChromium MainEngineChromium GPUIPCChannelChromium 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.