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