Daniel-Dos commented on a change in pull request #653:
URL: https://github.com/apache/tomee/pull/653#discussion_r436410603



##########
File path: examples/mp-jsonb-configuration/README_pt.adoc
##########
@@ -0,0 +1,308 @@
+:index-group: Unrevised
+:jbake-type: page
+:jbake-status: status=published
+= Configurando JSON-B
+
+Este exemplo mostra como personalizar jsonb para uma aplicação JAX-RS.
+JSONB é o novo padrão `javaee-api: 8.0` para serialização/desserialização de 
json. 
+Poucas anotações são necessárias e o `JsonbConfig` oferece muitas 
configurações.
+
+== Executando e testando o Endpoint
+
+A aplicação pode ser executada com `mvn clean install tomee: run` e se a porta 
8080 estiver disponivel,pode invocar o seguinte endpoint:

Review comment:
       done thanks

##########
File path: examples/mp-jsonb-configuration/README_pt.adoc
##########
@@ -0,0 +1,308 @@
+:index-group: Unrevised
+:jbake-type: page
+:jbake-status: status=published
+= Configurando JSON-B
+
+Este exemplo mostra como personalizar jsonb para uma aplicação JAX-RS.
+JSONB é o novo padrão `javaee-api: 8.0` para serialização/desserialização de 
json. 
+Poucas anotações são necessárias e o `JsonbConfig` oferece muitas 
configurações.
+
+== Executando e testando o Endpoint
+
+A aplicação pode ser executada com `mvn clean install tomee: run` e se a porta 
8080 estiver disponivel,pode invocar o seguinte endpoint:
+
+[source,bash]
+----
+$ curl -X GET http://localhost:8080/mp-jsonb-configuration/api/users
+----
+
+que deve responder com o seguinte json:
+
+[source,bash]
+----
+[
+  {
+    "Id":1,
+    "Name":"user 1",
+    "Registration":"2018 - 12 - 28"
+  },
+  {
+    "Id":2,
+    "Name":"user 2",
+    "Registration":"2018 - 12 - 28"
+  }
+]
+----
+
+== @ApplicationPath
+
+A classe de ponto de partida JAX-RS
+
+A classe de ponto de entrada JAXRS, da seguinte forma, os jaxrs carregarão 
todas as classes e métodos anotados com `@Path` sem especificá-los.
+
+[source,java]
+----
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@ApplicationPath("api")
+public class JAXRSApplication extends Application {
+
+}
+----
+
+== @Path Recurso Rest
+
+Classe jaxrs simples com um método GET
+
+[source,java]
+----
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.Stateless;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.superbiz.model.User;
+
+@Path("users")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Stateless
+public class UserService {
+
+    @GET
+    public List<User> users() {
+        List<User> users = new ArrayList<>();
+        User user1 = new User(1, "user 1");
+        User user2 = new User(2, "user 2");
+        users.add(user1);
+        users.add(user2);
+
+        return users;
+    }
+}
+----
+
+== Configurando JSONB
+
+A implementação de `ContextResolver<>` pode personalizar os padrões de jaxrs; 
neste exemplo, vamos personalizar a serialização/desserialização JSONB
+
+[source,java]
+----
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+import javax.json.bind.JsonbConfig;
+import javax.json.bind.config.PropertyNamingStrategy;
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+public class JSONBConfiguration implements ContextResolver<Jsonb> {
+
+    private Jsonb jsonb;
+
+    public JSONBConfiguration() {
+        // jsonbConfig offers a lot of configurations.
+        JsonbConfig config = new JsonbConfig().withFormatting(true)
+                
.withPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)
+                .withDateFormat("yyyy - MM - dd", Locale.ENGLISH);
+
+        jsonb = JsonbBuilder.create(config);
+    }
+
+    @Override
+    public Jsonb getContext(Class<?> type) {
+        return jsonb;
+    }
+
+}
+----
+
+`JsonbConfig` oferece muitas configurações.
+
+== Acessando o Recurso Rest
+
+O teste ativa um aplicativo da web openejb e chama o restante do recurso 
`/users`
+
+[source,java]
+----
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testing.EnableServices;
+import org.apache.openejb.testing.Module;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.superbiz.JAXRSApplication;
+import org.superbiz.JSONBConfiguration;
+
+@EnableServices(value = "jaxrs")
+@RunWith(ApplicationComposer.class)
+public class UserServiceTest {
+
+    @Module
+    @Classes({ UserService.class, JAXRSApplication.class, 
JSONBConfiguration.class })
+    public WebApp app() {
+        return new WebApp().contextRoot("test");
+    }
+
+    @Test
+    public void get() throws IOException {
+        final String message = 
WebClient.create("http://localhost:4204";).path("/test/api/users").get(String.class);
+        System.out.println(message);
+
+        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy - MM - dd");
+
+        // test withDateFormat("yyyy - MM - dd")
+        Assert.assertTrue(message.contains(sdf.format(new Date())));
+        // test withFormatting(true)
+        
Assert.assertTrue(message.contains(System.getProperty("line.separator")));
+    }
+
+}
+----
+
+== Executando
+Executando o exemplo se pode fazer desde maven com um simples comando `mvn 
clean install`, executando desde o diretorio `mp-jsonb-configuration`.

Review comment:
       done thanks

##########
File path: examples/mp-jsonb-configuration/README_pt.adoc
##########
@@ -0,0 +1,308 @@
+:index-group: Unrevised
+:jbake-type: page
+:jbake-status: status=published
+= Configurando JSON-B
+
+Este exemplo mostra como personalizar jsonb para uma aplicação JAX-RS.
+JSONB é o novo padrão `javaee-api: 8.0` para serialização/desserialização de 
json. 
+Poucas anotações são necessárias e o `JsonbConfig` oferece muitas 
configurações.
+
+== Executando e testando o Endpoint
+
+A aplicação pode ser executada com `mvn clean install tomee: run` e se a porta 
8080 estiver disponivel,pode invocar o seguinte endpoint:
+
+[source,bash]
+----
+$ curl -X GET http://localhost:8080/mp-jsonb-configuration/api/users
+----
+
+que deve responder com o seguinte json:
+
+[source,bash]
+----
+[
+  {
+    "Id":1,
+    "Name":"user 1",
+    "Registration":"2018 - 12 - 28"
+  },
+  {
+    "Id":2,
+    "Name":"user 2",
+    "Registration":"2018 - 12 - 28"
+  }
+]
+----
+
+== @ApplicationPath
+
+A classe de ponto de partida JAX-RS
+
+A classe de ponto de entrada JAXRS, da seguinte forma, os jaxrs carregarão 
todas as classes e métodos anotados com `@Path` sem especificá-los.
+
+[source,java]
+----
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@ApplicationPath("api")
+public class JAXRSApplication extends Application {
+
+}
+----
+
+== @Path Recurso Rest
+
+Classe jaxrs simples com um método GET
+
+[source,java]
+----
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.Stateless;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.superbiz.model.User;
+
+@Path("users")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Stateless
+public class UserService {
+
+    @GET
+    public List<User> users() {
+        List<User> users = new ArrayList<>();
+        User user1 = new User(1, "user 1");
+        User user2 = new User(2, "user 2");
+        users.add(user1);
+        users.add(user2);
+
+        return users;
+    }
+}
+----
+
+== Configurando JSONB
+
+A implementação de `ContextResolver<>` pode personalizar os padrões de jaxrs; 
neste exemplo, vamos personalizar a serialização/desserialização JSONB
+
+[source,java]
+----
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+import javax.json.bind.JsonbConfig;
+import javax.json.bind.config.PropertyNamingStrategy;
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+public class JSONBConfiguration implements ContextResolver<Jsonb> {
+
+    private Jsonb jsonb;
+
+    public JSONBConfiguration() {
+        // jsonbConfig offers a lot of configurations.
+        JsonbConfig config = new JsonbConfig().withFormatting(true)
+                
.withPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)
+                .withDateFormat("yyyy - MM - dd", Locale.ENGLISH);
+
+        jsonb = JsonbBuilder.create(config);
+    }
+
+    @Override
+    public Jsonb getContext(Class<?> type) {
+        return jsonb;
+    }
+
+}
+----
+
+`JsonbConfig` oferece muitas configurações.
+
+== Acessando o Recurso Rest
+
+O teste ativa um aplicativo da web openejb e chama o restante do recurso 
`/users`
+
+[source,java]
+----
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testing.EnableServices;
+import org.apache.openejb.testing.Module;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.superbiz.JAXRSApplication;
+import org.superbiz.JSONBConfiguration;
+
+@EnableServices(value = "jaxrs")
+@RunWith(ApplicationComposer.class)
+public class UserServiceTest {
+
+    @Module
+    @Classes({ UserService.class, JAXRSApplication.class, 
JSONBConfiguration.class })
+    public WebApp app() {
+        return new WebApp().contextRoot("test");
+    }
+
+    @Test
+    public void get() throws IOException {
+        final String message = 
WebClient.create("http://localhost:4204";).path("/test/api/users").get(String.class);
+        System.out.println(message);
+
+        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy - MM - dd");
+
+        // test withDateFormat("yyyy - MM - dd")
+        Assert.assertTrue(message.contains(sdf.format(new Date())));
+        // test withFormatting(true)
+        
Assert.assertTrue(message.contains(System.getProperty("line.separator")));
+    }
+
+}
+----
+
+== Executando
+Executando o exemplo se pode fazer desde maven com um simples comando `mvn 
clean install`, executando desde o diretorio `mp-jsonb-configuration`.
+
+Quando executado, você deve ver uma saída semelhante à seguinte:
+
+[source,java]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.rest.UserServiceTest
+INFO - Created new singletonService 
org.apache.openejb.cdi.ThreadSingletonServiceImpl@7823a2f9
+INFO - Succeeded in installing singleton service
+INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to 
create one for the beans deployed.
+INFO - Configuring Service(id=Default Security Service, type=SecurityService, 
provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager, 
type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Creating TransactionManager(id=Default Transaction Manager)
+INFO - Creating SecurityService(id=Default Security Service)
+INFO - Initializing network services
+INFO - Creating ServerService(id=cxf-rs)
+INFO - Creating ServerService(id=httpejbd)
+INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) 
threads with a queue of (9)
+INFO - Initializing network services
+INFO -   ** Bound Services **
+INFO -   NAME                 IP              PORT
+INFO -   httpejbd             127.0.0.1       4204
+INFO - -------
+INFO - Ready!
+INFO - Configuring enterprise application: 
/home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest
+INFO - Auto-deploying ejb UserService: EjbDeployment(deployment-id=UserService)
+INFO - Configuring Service(id=Default Managed Container, type=Container, 
provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean org.superbiz.rest.UserServiceTest: 
Container(type=MANAGED, id=Default Managed Container)
+INFO - Creating Container(id=Default Managed Container)
+INFO - Using directory /tmp for stateful session passivation
+INFO - Configuring Service(id=Default Stateless Container, type=Container, 
provider-id=Default Stateless Container)
+INFO - Auto-creating a container for bean UserService: 
Container(type=STATELESS, id=Default Stateless Container)
+INFO - Creating Container(id=Default Stateless Container)
+INFO - Enterprise application 
"/home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest"
 loaded.
+INFO - Creating dedicated application classloader for UserServiceTest
+INFO - Assembling app: 
/home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest
+INFO - Jndi(name=UserServiceLocalBean) --> Ejb(deployment-id=UserService)
+INFO - Jndi(name=global/test/UserService!org.superbiz.rest.UserService) --> 
Ejb(deployment-id=UserService)
+INFO - Jndi(name=global/test/UserService) --> Ejb(deployment-id=UserService)
+INFO - Created Ejb(deployment-id=UserService, ejb-name=UserService, 
container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=UserService, ejb-name=UserService, 
container=Default Stateless Container)
+INFO - Using readers:
+INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@2f94c4db
+INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6b5966e1
+INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@65e61854
+INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@1568159
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@4fcee388
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@6f80fafe
+INFO -      
org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@63cd604c
+INFO -      
org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@593e824f
+INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@72ccd81a
+INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6d8792db
+INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@64bc21ac
+INFO - Using writers:
+INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@493dfb8e
+INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@5d25e6bb
+INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@72ccd81a
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@4fcee388
+INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@2f94c4db
+INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6b5966e1
+INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@65e61854
+INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@1568159
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@6f80fafe
+INFO -      
org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@63cd604c
+INFO -      
org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@593e824f
+INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6d8792db
+INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@64bc21ac
+INFO - Using exception mappers:
+INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@361c294e
+INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@6fff253c
+INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@7859e786
+INFO -      
org.apache.openejb.server.cxf.rs.CxfRsHttpListener$CxfResponseValidationExceptionMapper@285d851a
+INFO - REST Application: http://127.0.0.1:4204/test/api       -> 
org.superbiz.JAXRSApplication@5af28b27
+INFO -      Service URI: http://127.0.0.1:4204/test/api/users ->  EJB 
org.superbiz.rest.UserService
+INFO -               GET http://127.0.0.1:4204/test/api/users ->      
List<User> users()
+INFO - Deployed 
Application(path=/home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest)
+[
+  {
+    "Id":1,
+    "Name":"user 1",
+    "Registration":"2018 - 12 - 28"
+  },
+  {
+    "Id":2,
+    "Name":"user 2",
+    "Registration":"2018 - 12 - 28"
+  }
+]
+INFO - Undeploying app: 
/home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest
+INFO - Stopping network services
+INFO - Stopping server services
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.203 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+
+----
+
+=== Dentro do jar
+
+`javaee-api: 8.0` ele incorpora todas as dependências necessárias para ativar 
um aplicativo REST em funcionamento.
+
+Se olharmos para o jar construído por maven, veremos que o aplicativo em si é 
bem pequeno:
+
+[source,bash]
+----
+$ jar tvf target/mp-jsonb-configuration-8.0.0-SNAPSHOT.war
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/
+   134 Fri Dec 28 19:36:08 CET 2018 META-INF/MANIFEST.MF
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/model/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/rest/
+  1165 Fri Dec 28 19:36:06 CET 2018 
WEB-INF/classes/org/superbiz/model/User.class
+   402 Fri Dec 28 19:36:06 CET 2018 
WEB-INF/classes/org/superbiz/JAXRSApplication.class
+  1194 Fri Dec 28 19:36:06 CET 2018 
WEB-INF/classes/org/superbiz/rest/UserService.class
+  1701 Fri Dec 28 19:36:06 CET 2018 
WEB-INF/classes/org/superbiz/JSONBConfiguration.class
+  1224 Fri Dec 28 18:28:32 CET 2018 WEB-INF/web.xml
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/org.superbiz/
+     0 Fri Dec 28 19:36:10 CET 2018 
META-INF/maven/org.superbiz/mp-jsonb-configuration/
+  1791 Fri Dec 28 19:10:44 CET 2018 
META-INF/maven/org.superbiz/mp-jsonb-configuration/pom.xml
+   128 Fri Dec 28 19:36:08 CET 2018 
META-INF/maven/org.superbiz/mp-jsonb-configuration/pom.properties
+----
+
+Esse jar individual pode ser implementado em qualquer implementação Java EE 
que atenda aos requisitos. No TomEE, basta colocá-lo no diretório 
`${tomee.home}/webapps/`.

Review comment:
       done thanks




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to