You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2018/12/28 09:37:15 UTC

tomee git commit: Add readme file

Repository: tomee
Updated Branches:
  refs/heads/master 708f8aec0 -> 21dfa9a72


Add readme file


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/21dfa9a7
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/21dfa9a7
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/21dfa9a7

Branch: refs/heads/master
Commit: 21dfa9a72461047198cca66030af8be3d1bec38c
Parents: 708f8ae
Author: Jean-Louis Monteiro <je...@gmail.com>
Authored: Fri Dec 28 10:36:47 2018 +0100
Committer: Jean-Louis Monteiro <je...@gmail.com>
Committed: Fri Dec 28 10:36:47 2018 +0100

----------------------------------------------------------------------
 examples/cdi-session-scope/README.adoc  | 134 +++++++++++++++++++++++++++
 examples/mp-metrics-metered/README.adoc | 133 ++++++++++++++++++++++++++
 2 files changed, 267 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/21dfa9a7/examples/cdi-session-scope/README.adoc
----------------------------------------------------------------------
diff --git a/examples/cdi-session-scope/README.adoc b/examples/cdi-session-scope/README.adoc
new file mode 100644
index 0000000..e529424
--- /dev/null
+++ b/examples/cdi-session-scope/README.adoc
@@ -0,0 +1,134 @@
+index-group=Unrevised
+type=page
+status=unpublished
+
+= CDI @SessionScoped
+
+This example show the use of `@SessionScoped` annotation for injected objects. An object
+which is defined as `@SessionScoped` is created once for every HTTPSession and is shared by all the
+beans that inject it throughout the same HTTPSession.
+
+== Run the application:
+
+    mvn clean install tomee:run 
+	
+== Example
+
+This example has an end point wherein a user provides a request parameter 'name' which is persisted as a feild in a session scoped bean SessionBean and 
+then retrieved through another endpoint.
+
+== Request
+
+GET http://localhost:8080/cdi-session-scope/set-name?name=Puneeth
+
+== Response
+
+done, go to /name servlet 
+
+== Request
+
+GET http://localhost:8080/cdi-session-scope/name
+
+== Response
+
+name = {Puneeth} 
+ 
+== SessionBean
+
+The annotation @SessionScoped specifies that a bean is session scoped ie there will be only one instance of the class associated with a particular HTTPSession.  
+
+[source,java]
+----
+@SessionScoped
+public class SessionBean implements Serializable {
+
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}  
+----
+
+== InputServlet
+
+InputServlet is a generic servlet which is mapped to the url pattern '/set-name'.
+The session scoped bean 'SessionBean' has been injected into this servlet, and the incoming request parameter is set to the feild name of the bean. 
+
+[source,java]
+----
+@WebServlet(name = "input-servlet", urlPatterns = {"/set-name"})
+public class InputServlet extends HttpServlet {
+
+    @Inject
+    private SessionBean bean;
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp 
+    throws ServletException, IOException {
+        final String name = req.getParameter("name");
+        if (name == null || name.isEmpty()) {
+            resp.getWriter().write("please add a parameter name=xxx");
+        } else {
+            bean.setName(name);
+            resp.getWriter().write("done, go to /name servlet");
+        }
+
+    }
+}
+----
+
+== AnswerBean
+
+AnswerBean is a request scoped bean with an injected 'SessionBean'. It has an postconstruct method wherein the value from the sessionBean is retrieved and set to a feild.
+
+[source,java]
+----
+public class AnswerBean {
+
+    @Inject
+    private SessionBean bean;
+
+    private String value;
+
+    @PostConstruct
+    public void init() {
+        value = '{' + bean.getName() + '}';
+    }
+
+    public String value() {
+        return value;
+    }
+}
+----
+
+== OutputServlet
+
+OutputServlet is another servlet with  'AnswerBean' as an injected feild. When '/name' is called the value from 'Answerbean' is read and written to the response.
+
+[source,java]
+----
+@WebServlet(name = "output-servlet", urlPatterns = {"/name"})
+public class OutputServlet extends HttpServlet {
+
+    @Inject
+    private AnswerBean bean;
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+     throws ServletException, IOException {
+        final String name = bean.value();
+        if (name == null || name.isEmpty()) {
+            resp.getWriter().write("please go to servlet /set-name please");
+        } else {
+            resp.getWriter().write("name = " + name);
+        }
+    }
+}
+
+----
+

http://git-wip-us.apache.org/repos/asf/tomee/blob/21dfa9a7/examples/mp-metrics-metered/README.adoc
----------------------------------------------------------------------
diff --git a/examples/mp-metrics-metered/README.adoc b/examples/mp-metrics-metered/README.adoc
new file mode 100644
index 0000000..f527082
--- /dev/null
+++ b/examples/mp-metrics-metered/README.adoc
@@ -0,0 +1,133 @@
+index-group=Unrevised
+type=page
+status=published
+
+= Microprofile Metrics
+
+This is an example on how to use microprofile metrics in TomEE.
+
+== Run the application:
+
+    mvn clean install tomee:run 
+
+Within the application, there is an enpoint that will give you a weather weather status for the day and week.
+
+== For the day status call:
+
+    GET http://localhost:8080/mp-metrics-metered/weather/day/status
+    
+== Response:
+
+    Hi, today is a sunny day!
+
+== Metered Feature
+MicroProfile metrics has a feature that can be used to find the rate of requests to a service.
+
+To use this feature you need to annotate the JAX-RS resource method with @Metered.
+[source,java]
+----
+
+    @Path("/weather")
+    @Produces(MediaType.APPLICATION_JSON)
+    @Consumes(MediaType.APPLICATION_JSON)
+    @ApplicationScoped
+    public class WeatherService {
+
+        @Path("/day/status")
+        @Metered(name = "dailyStatus", unit = MetricUnits.MINUTES, description = "Metrics to daily weather status method", absolute = true)
+        @GET
+        @Produces(MediaType.TEXT_PLAIN)
+        public String dayStatus() {
+            return "Hi, today is a sunny day!";
+        }
+    ...
+    }
+----
+There are some configurations, as part of @Metered, that you need to know:
+
+**String name**
+Optional. Sets the name of the metric. If not explicitly given the name of the annotated object is used.
+
+**boolean absolute**
+If true, uses the given name as the absolute name of the metric. If false, prepends the package name and class name before the given name. Default value is false.
+
+**String displayName**
+Optional. A human-readable display name for metadata.
+
+**String description**
+Optional. A description of the metric.
+
+**String[] tags**
+Optional. Array of Strings in the <key>=<value> format to supply special tags to a metric.
+
+**boolean reusable**
+Denotes if a metric with a certain name can be registered in more than one place. Does not apply to gauges.
+
+**String unit**
+Unit of the metric. Default for @Metered is nanoseconds.
+
+== Metric data
+
+Check the Metered metric doing a _GET_ request:
+
+== Prometheus format:
+
+    GET http://localhost:8080/mp-metrics-metered/metrics/application/dailyStatus
+    
+== Response:
+     
+	# TYPE application:daily_status_seconds_count meter
+	application:daily_status_seconds_count 1.2E-7
+	# TYPE application:daily_status_rate_per_second meter
+	application:daily_status_rate_per_second 0.0
+	# TYPE application:daily_status_one_min_rate_per_second meter
+	application:daily_status_one_min_rate_per_second 1.3376002644204984E-19
+	# TYPE application:daily_status_five_min_rate_per_second meter
+	application:daily_status_five_min_rate_per_second 3.5942838529305413E-20
+	# TYPE application:daily_status_fifteen_min_rate_per_second meter
+	application:daily_status_fifteen_min_rate_per_second 3.4665766454142955E-21
+    
+  
+== JSON Format:
+
+For json format add the header _Accept=application/json_ to the request. 
+  
+	{
+		"dailyStatus": {
+			"count": 2,
+			"fifteenMinRate": 5.77762774235716e-14,
+			"fiveMinRate": 5.990473088217569e-13,
+			"meanRate": 0,
+			"oneMinRate": 2.229333774034164e-12,
+			"unit": "minutes"
+		}
+	}
+   
+== Metric metadata
+A metric will have a metadata so you can know more information about it, like displayName, description, tags  etc.
+
+Check the metric metadata doing a _OPTIONS_ request:
+
+== Request
+
+    OPTIONS http://localhost:8080/mp-metrics-metered/metrics/application/dailyStatus
+
+== Response:
+
+	{
+		"dailyStatus": {
+			"description": "Metrics to daily weather status method",
+			"displayName": "",
+			"name": "dailyStatus",
+			"reusable": false,
+			"tags": "",
+			"type": "meter",
+			"typeRaw": "METERED",
+			"unit": "minutes"
+		}
+	}
+
+
+== Test the application:
+
+    mvn test