Como usar o servidor de desenvolvimento local em Java 8

O SDK do Cloud para Java inclui um servidor de desenvolvimento local para testar o aplicativo no computador. No servidor de desenvolvimento local, são emulados o "Java Runtime Environment" do App Engine e todos os respectivos serviços, incluindo o Datastore.

Como executar o servidor da Web de desenvolvimento

Para mais informações sobre como definir propriedades do sistema e variáveis ​​de ambiente para seu aplicativo, consulte Como as solicitações são processadas.

Além disso, é possível executar o servidor da Web de desenvolvimento em um prompt de comando. O comando a ser executado está localizado no diretório google-cloud-sdk/bin/ do SDK.

Sintaxe de comando do Windows:

google-cloud-sdk\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Sintaxe de comando do Linux ou macOS:

google-cloud-sdk/bin/java_dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

O comando usa como argumento o local do diretório "WAR" do seu aplicativo.

Como parar o servidor de desenvolvimento

Para interromper o servidor da Web, pressione Ctrl-C.

Como detectar o ambiente de execução do aplicativo

Para determinar se o código está em execução na produção ou no servidor de desenvolvimento local, verifique o valor do método SystemProperty.environment.value(). Por exemplo:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
   // Production
 } else {
  // Local development server
  // which is: SystemProperty.Environment.Value.Development
}

Como usar o emulador do Datastore local

O servidor da Web de desenvolvimento simula o Datastore usando um Datastore local endossado por arquivos no seu computador. O Datastore é chamado de local_db.bin e é criado no diretório WAR do aplicativo, no diretório WEB-INF /appengine-generated/. Ele não faz parte do upload referente ao seu aplicativo.

Esse Datastore permanece entre invocações do servidor da Web, por isso os dados armazenados por você continuarão disponíveis na próxima vez que você executar o servidor da Web. Para limpar o conteúdo do Datastore, encerre o servidor e exclua esse arquivo.

Conforme descrito na Configuração de índice do armazenamento de dados, o servidor de desenvolvimento pode gerar configuração para índices do Datastore que são necessários para seu aplicativo, com base nas consultas realizadas durante os testes. Isso gera um arquivo chamado datastore-indexes-auto.xml no diretório WEB-INF/appengine-generated/ do WAR. Para desativar a configuração automática de índice, crie ou edite o arquivo datastore-indexes.xml no diretório WEB-INF/ usando o atributo autoGenerate="false" para o elemento <datastore-indexes>. Para mais informações, consulte Configuração de índice do armazenamento de dados.

Como navegar pelo Datastore no servidor de desenvolvimento

Para navegar pelo Datastore local usando o servidor da Web de desenvolvimento:

  1. Inicie o servidor de desenvolvimento conforme descrito anteriormente.
  2. Vá para o Console de desenvolvimento.
  3. Clique em Leitor do Datastore no painel de navegação esquerdo para visualizar o conteúdo do Datastore local.

O modelo de consistência do Cloud Datastore

Por padrão, o Datastore local está configurado para definir como 10% a porcentagem de gravações no Datastore que não sejam imediatamente visíveis em consultas globais.

Para ajustar esse nível de consistência, defina a propriedade do sistema datastore.default_high_rep_job_policy_unapplied_job_pct com um valor correspondente à quantidade de consistência eventual que você quer que o aplicativo veja.

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

Se você estiver definindo essa propriedade usando o prompt de comando java_dev_appserver.sh, use --jvm_flag=... para definir a propriedade:

google_cloud_sdk/bin/java-dev_appserver.sh  --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

O intervalo válido para datastore.default_high_rep_job_policy_unapplied_job_pct está entre 0 e 100. Se você usar números fora desse intervalo, receberá um erro.

Se você estiver usando o Maven, transmita essa sinalização como um argumento para appengine:devserver usando o jvmFlags:

<jvmFlags>
  <jvmFlag>-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20</jvmFlag>
</jvmFlags>

Como especificar a política de alocação automática de IDs

Você pode configurar como o Datastore local atribui códigos automáticos de entidade. As seguintes políticas de alocação de códigos automáticos são compatíveis com o servidor de desenvolvimento:

sequential
Os IDs são atribuídos com base na sequência de números inteiros consecutivos.
scattered
Os IDs são atribuídos de uma sequência sem repetições de números inteiros distribuídos de maneira quase uniforme.

A política padrão no Datastore local é scattered.

Para especificar a política automática de IDs, defina a propriedade do sistema datastore.auto_id_allocation_policy como sequential ou scattered.

-Ddatastore.auto_id_allocation_policy=scattered

Para definir essa propriedade do sistema por meio de uma sinalização passada para a macro dev_appserver:

java_dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered

Como simular contas de usuário

O servidor da Web de desenvolvimento simula as Contas do Google com suas próprias páginas de login e logout. Ao serem executados no servidor web de desenvolvimento, os métodos que geram os URLs de login e desconexão retornam URLs para /_ah/login e /_ah/logout no servidor local.

A página de login do servidor de desenvolvimento inclui um formulário em que é possível inserir um endereço de e-mail. Sua sessão usa o endereço de e-mail que você inseriu como usuário ativo.

Para que o aplicativo acredite que o usuário conectado é um administrador, marque a caixa de seleção "Fazer login como administrador" no formulário.

Como usar a busca de URLs

Quando seu aplicativo usa a URL Fetch API para fazer uma solicitação HTTP, o servidor da Web de desenvolvimento efetua a solicitação diretamente do seu computador. Se você costuma usar um servidor proxy para acessar sites, o comportamento pode ser diferente de quando o aplicativo é executado no App Engine.

O console de desenvolvimento

O servidor da Web de desenvolvimento conta com um aplicativo da Web de console. Com o console, você pode navegar pelo Datastore local.

Para acessar o console, acesse o URL /_ah/admin no seu servidor: http://localhost:8080/_ah/admin

Argumentos da linha de comando

O comando do servidor de desenvolvimento é compatível com os seguintes argumentos da linha de comando:

--address=...

O endereço de host a ser usado para o servidor. Talvez seja necessário configurar isso para poder acessar o servidor de desenvolvimento a partir de outro computador na rede. O endereço 0.0.0.0 permite acesso tanto ao localhost como ao hostname. Padrão: localhost.

--default_gcs_bucket=...

Define o nome de bucket padrão do Google Cloud Storage.

--disable_update_check

Se este argumento for fornecido, o servidor de desenvolvimento não entrará em contato com o App Engine para verificar a disponibilidade de uma nova versão do SDK. Por padrão, o servidor verifica na inicialização se há uma nova versão e imprime uma mensagem caso ela esteja disponível.

--generated_dir=...

Define o diretório em que são criados os arquivos gerados.

--help

Imprime uma mensagem útil e encerra.

--jvm_flag=...

Passa a sinalização fornecida como um argumento JVM. Pode ser repetido para fornecer várias sinalizações.

--port=...

O número da porta a ser usado com o servidor. O padrão é 8080.

--sdk_root=...

Um caminho para o SDK do Cloud, se for diferente do local da ferramenta.

--server=...

O servidor a ser usado para determinar a versão mais recente do SDK.