You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ce...@apache.org on 2021/03/08 20:50:06 UTC
[tomee] branch master updated: TOMEE-2926: Translate to Portuguese:
examples/serverless-builder
This is an automated email from the ASF dual-hosted git repository.
cesarhernandezgt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/master by this push:
new 6dec299 TOMEE-2926: Translate to Portuguese: examples/serverless-builder
new e4fabe5 Merge pull request #719 from Daniel-Dos/TOMEE-2926
6dec299 is described below
commit 6dec299eb17a29d38d7d47738abc6ee14d99487b
Author: Daniel Dias <da...@gmail.com>
AuthorDate: Tue Nov 17 01:28:23 2020 -0300
TOMEE-2926: Translate to Portuguese: examples/serverless-builder
---
examples/serverless-builder/README_pt.adoc | 209 +++++++++++++++++++++++++++++
1 file changed, 209 insertions(+)
diff --git a/examples/serverless-builder/README_pt.adoc b/examples/serverless-builder/README_pt.adoc
new file mode 100644
index 0000000..d58c881
--- /dev/null
+++ b/examples/serverless-builder/README_pt.adoc
@@ -0,0 +1,209 @@
+:index-group: Serverless
+:jbake-type: page
+:jbake-status: status=published
+= Serverless Builder API
+
+A API `Server.Builder` permite que você construa uma instância embutida(embedded) ou sem servidor(serverless) de Tomcat/TomEE dentro da sua JVM, efetivamente executando Tomcat/TomEE como uma biblioteca simples.
+
+[source,java]
+----
+import org.apache.tomee.bootstrap.Server;
+
+public class Main {
+ public static void main(String[] args) {
+ final Server server = Server.builder().build();
+
+ System.out.println("Listening for requests at " + server.getURI());
+ }
+}
+----
+
+O design da API pode ser melhor descrito como uma API de construtor funcional (FBA) e permite efetivamente fornecer funções e referências de método que realmente auxiliam no processo de construção do servidor. É por meio dessas funções que você pode implantar aplicativos, modificar configurações e executar com eficácia qualquer código de que você precisa para ajudar a preparar a instância do servidor.
+
+Uma visão geral de alto nível dos métodos builder disponíveis após chamar `Server.builder ()` são os seguintes:
+
+[source,java]
+----
+public static class Builder
+ public Builder httpPort(final int port)
+ public Builder ajpPort(final int port)
+ public Builder add(final String name, final byte[] bytes)
+ public Builder add(final String name, final Supplier<byte[]> content)
+ public Builder add(final String name, final String content)
+ public Builder add(final String name, final File content)
+ public Builder add(final String name, final Archive contents)
+ public Builder home(final Consumer<File> customization)
+ public Builder and(final Consumer<Builder> consumer)
+ public Server build()
+----
+
+Para realmente saber como usar a API, primeiramente devemos entender os conceitos `catalina.home` e `catalina.base` do Tomcat e o que realmente acontece quando chamamos `Server.builder().Build()`.
+
+=== Compreendendo a home e base do Tomcat
+
+É um fato pouco conhecido que por décadas o Tomcat teve a capacidade de executar várias instâncias a partir de um único zip do Tomcat. O Tomcat usa uma variável `catalina.home` para identificar a localização do zip extraído onde as bibliotecas do servidor podem ser encontradas e um `catalina.base` por instância para definir a localização dos arquivos de configuração, arquivos de log e aplicativos da web dessa instância.
+
+Em nossa situação, seu classpath JVM é efetivamente o `catalina.home` e quando usamos a API do `Server` estamos criando um `catalina.base` muito fino que contém os arquivos de configuração, arquivos de log e webapps para essa instância de servidor construído (Tomcat). Se você usar a API `Server` dez vezes na mesma JVM, terá 10 diretórios ` catalina.base`. No entanto, eles são considerados locais de trabalho temporários e serão excluídos na saída da JVM.
+
+=== Chamando o `Server.builder().build()`
+
+Quando o método `build()` do `Server.Builder` é chamado, as seguintes ações são realizadas nesta ordem:
+
+ 1. Quaisquer funções adicionadas via `and(final Consumer<Builder> consumer)` são executadas. Isso permite que seja fornecida uma função que modifique ainda mais o construtor antes de qualquer construção ser executada. Várias modificações do construtor podem ser agrupadas em uma função que as instala todas.
+ 1. É criado um diretório temporário que servirá como `catalina.home` e `catalina.base` e as configurações padrão como `server.xml`,`logging.properties` e `tomee.xml` são copiadas.
+ 1. AQuaisquer funções adicionadas por meio de `add(final String destinationPath, final Supplier<byte[]> content)` são executadas e quaisquer bytes fornecidos, Strings ou Arquivos são gravados em `destinationPath` dentro do diretório temporário. Isso permite que as configurações padrão como `server.xml` sejam sobrescritas ou aplicativos sejam escritos no diretório `webapps/`.
+ 1. As portas são definidas modificando-se `conf/server.xml`. Se `httpPort` não foi definido, as portas serão aleatórias.
+ 1. Todas as funções adicionadas via `home(final Consumer<File> customization)` são executadas. O diretório temporário será fornecido como o valor de `File`.
+ 1. A instância Tomcat/TomEE é iniciada e retornada como uma instância de `Server`.
+
+=== Vendo o resultado de `Server.builder().Build()`
+
+Ajuda muito poder ver o que foi construído. Podemos fazer isso instalando uma referência de função ou método como mostrada abaixo.
+
+[source,java]
+----
+import org.apache.tomee.bootstrap.Server;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.stream.Stream;
+
+public class Main {
+
+ public static void main(String[] args) {
+ Server.builder()
+ .home(Main::list)
+ .build();
+ }
+
+ private static void list(final File home) {
+ try {
+ Files.walk(home.toPath())
+ .sorted()
+ .forEach(System.out::println);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+}
+----
+
+Quando o executamos, devemos ver uma saída semelhante a esta:
+
+[source,console]
+----
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/catalina.policy
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/catalina.properties
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/context.xml
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/jaspic-providers.xml
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/jaspic-providers.xsd
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/logging.properties
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/server.xml
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/system.properties
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/tomcat-users.xml
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/tomcat-users.xsd
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/tomee.xml
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/conf/web.xml
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/logs
+/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp9107162877421339516dir/apache-tomee/webapps
+----
+
+O acima representa o que sai da caixa ao chamar `Server.builder().Build()` sem modificações.
+
+== Criação de aplicativos com `Archive`
+
+A segunda classe a aprender é `Archive` e é essencialmente um construtor de aplicativos simples. Com essa abordagem, todas as suas classes já estão efetivamente no classpath e visíveis, portanto, em última análise, as únicas classes que precisam ser incluídas são Servlets anotados, EJBs, CDI Beans, classes JAX-RS, etc.
+
+[source,java]
+----
+public class Archive
+ public static Archive archive()
+ public Archive manifest(final String key, final Object value)
+ public Archive manifest(final String key, final Class value)
+ public Archive add(final String name, final byte[] bytes)
+ public Archive add(final String name, final Supplier<byte[]> content)
+ public Archive add(final String name, final String content)
+ public Archive add(final String name, final File content)
+ public Archive add(final String name, final Archive archive)
+ public Archive add(final String name, final URL content)
+ public Archive add(final Class<?> clazz)
+ public Archive addDir(final File dir)
+ public Archive addJar(final File file)
+ public File toJar()
+ public File toJar(final File file)
+ public File toDir()
+ public void toDir(final File dir)
+----
+
+NOTE: Você pode usar APIs como ShrinkWrap para construir os jars e arquivos war como uma alternativa para `Archive`. Qualquer coisa que possa produzir um arquivo jar, um arquivo war ou uma estrutura de diretório war explodida (descompactada) funcionará.
+
+=== Creating a ROOT war
+
+Neste exemplo, estamos efetivamente adicionando três classes a um `Archive` que é adicionado a um novo diretório `webapps/ROOT/WEB-INF/classes`.
+
+[source,java]
+----
+import org.apache.tomee.bootstrap.Archive;
+import org.apache.tomee.bootstrap.Server;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ final Server server = Server.builder()
+ .add("webapps/ROOT/WEB-INF/classes", Archive.archive()
+ .add(Api.class)
+ .add(Movie.class)
+ .add(MovieService.class))
+ .home(Main::list)
+ .build();
+
+ System.out.println("Listening for requests at " + server.getURI());
+ }
+
+ private static void list(final File home) {
+ try {
+ Files.walk(home.toPath())
+ .map(Path::toFile)
+ .filter(File::isFile)
+ .map(File::getAbsolutePath)
+ .map(s -> "..." + s.substring(49))
+ .sorted()
+ .forEach(System.out::println);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+}
+----
+
+Quando isso for executado, veremos o método `Main.list`, que é executado logo antes do início do servidor, imprimirá o seguinte:
+
+[source,console]
+----
+...temp710654453954858189dir/apache-tomee/conf/catalina.policy
+...temp710654453954858189dir/apache-tomee/conf/catalina.properties
+...temp710654453954858189dir/apache-tomee/conf/context.xml
+...temp710654453954858189dir/apache-tomee/conf/jaspic-providers.xml
+...temp710654453954858189dir/apache-tomee/conf/jaspic-providers.xsd
+...temp710654453954858189dir/apache-tomee/conf/logging.properties
+...temp710654453954858189dir/apache-tomee/conf/server.xml
+...temp710654453954858189dir/apache-tomee/conf/system.properties
+...temp710654453954858189dir/apache-tomee/conf/tomcat-users.xml
+...temp710654453954858189dir/apache-tomee/conf/tomcat-users.xsd
+...temp710654453954858189dir/apache-tomee/conf/tomee.xml
+...temp710654453954858189dir/apache-tomee/conf/web.xml
+...temp710654453954858189dir/apache-tomee/webapps/ROOT/WEB-INF/classes/org/superbiz/movie/Api.class
+...temp710654453954858189dir/apache-tomee/webapps/ROOT/WEB-INF/classes/org/superbiz/movie/Movie.class
+...temp710654453954858189dir/apache-tomee/webapps/ROOT/WEB-INF/classes/org/superbiz/movie/MovieService.class
+----
\ No newline at end of file